如何获取新浪微博的登录参数
1、用Chrome的开发者工具或者Firefox的Firebug来进行抓包
找到login.php文件,就可以看到此文件的一些请求参数,
?
?
?
2、用httpclient4.x登录新浪微博源码(转)
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;?import org.apache.commons.io.IOUtils;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;?public class SinaLogin {?private final static HttpClient client = new DefaultHttpClient();?/** * 抓取网页 * * @param url * @throws IOException */static String get(String url) throws IOException {HttpGet get = new HttpGet(url);HttpResponse response = client.execute(get);System.out.println(response.getStatusLine());HttpEntity entity = response.getEntity();?String result = dump(entity);get.abort();?return result;}?/** * 执行登录过程 * * @param user * @param pwd * @param debug * @throws IOException */static void login(String user, String pwd) throws IOException {HttpPost post = new HttpPost("http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.14)");post.setHeader("User-Agent","Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0");post.setHeader("Referer", "http://weibo.com/");post.setHeader("Content-Type", "application/x-www-form-urlencoded");?// 登录表单的信息List<NameValuePair> qparams = new ArrayList<NameValuePair>();qparams.add(new BasicNameValuePair("entry", "miniblog"));qparams.add(new BasicNameValuePair("gateway", "1"));qparams.add(new BasicNameValuePair("from", ""));qparams.add(new BasicNameValuePair("savestate", "0"));qparams.add(new BasicNameValuePair("useticket", "1"));qparams.add(new BasicNameValuePair("ssosimplelogin", "1"));qparams.add(new BasicNameValuePair("service", "miniblog"));// servertime=1309164392// nonce=PJZCHM// qparams.add(new BasicNameValuePair("pwencode", "wsse"));qparams.add(new BasicNameValuePair("encoding", "utf-8"));qparams.add(new BasicNameValuePair("url","http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack"));qparams.add(new BasicNameValuePair("returntype", "META"));?qparams.add(new BasicNameValuePair("username", user));qparams.add(new BasicNameValuePair("password", pwd));?UrlEncodedFormEntity params = new UrlEncodedFormEntity(qparams, "UTF-8");post.setEntity(params);?// Execute the requestHttpResponse response = client.execute(post);post.abort();// 新浪微博登录没有301,302之类的跳转;而是返回200,然后用javascript实现的跳转// int statusCode = response.getStatusLine().getStatusCode();// if ((statusCode == HttpStatus.SC_MOVED_PERMANENTLY)// || (statusCode == HttpStatus.SC_MOVED_TEMPORARILY)// || (statusCode == HttpStatus.SC_SEE_OTHER)// || (statusCode == HttpStatus.SC_TEMPORARY_REDIRECT)) {// // 此处重定向处理 此处还未验证// String newUri = response.getLastHeader("Location").getValue();// get(newUri);// }?// Get hold of the response entityHttpEntity entity = response.getEntity();// 取出跳转的url// location.replace("http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&ticket=ST-MTkxODMxOTI0Nw==-1309224549-xd-263902F174B27BAB9699691BA866EFF2&retcode=0");String location = getRedirectLocation(dump(entity));get(location);}?private static String getRedirectLocation(String content) {String regex = "location\\.replace\\(\'(.*?)\'\\)";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(content);?String location = null;if (matcher.find()) {location = matcher.group(1);}?return location;}?/** * 打印页面 * * @param entity * @throws IOException */private static String dump(HttpEntity entity) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent(), "utf8"));?//return EntityUtils.toString(entity);return IOUtils.toString(br);}?public static void main(String[] args) throws IOException {login("username", "password");String result = get("http://t.sina.com.cn/pub/tags");System.out.println(result);}}?