1、用Chrome的开发者工具或者Firefox的Firebug来进行抓包
找到login.php文件,就可以看到此文件的一些请求参数,
-
Request URL:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.22)
-
Request Method:POST
-
Status Code:200 OK
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 request
HttpResponse 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 entity
HttpEntity 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);
}
}