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); } }
?