新浪微博のログインパラメータを取得する方法

26311 ワード

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

Request Headersview source
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Charset:
GBK,utf-8;q=0.7,*;q=0.3

Accept-Encoding:
gzip,deflate,sdch

Accept-Language:
zh-CN,zh;q=0.8

Cache-Control:
max-age=0

Connection:
keep-alive

Content-Length:
380

Content-Type:
application/x-www-form-urlencoded

Cookie:
Apache=00000073.8a4c255d.4fbcca08.3dec6e4b; SINAGLOBAL=00000073.8a51255d.4fbcca08.f60eaf69; U_TRS1=00000073.a032426f.4fbccf5b.de1e4686; U_TRS2=00000073.a044426f.4fbccf5b.84a48193; UOR=,www.sina.com.cn,; ULV=1337773919392:1:1:1:00000073.8a4c255d.4fbcca08.3dec6e4b:; SGUP=0; _s_upa=2; vjuids=1c9c46cf8.137798a2e07.0.baab928e; vjlast=1337773928; __utma=269849203.1663258918.1337773929.1337773929.1337773929.1; __utmb=269849203.1.10.1337773929; __utmc=269849203; __utmz=269849203.1337773929.1.1.utmcsr=login.sina.com.cn|utmccn=(referral)|utmcmd=referral|utmcct=/crossdomain2.php; ULOGIN_IMG=fe55e24c15322ed8e655ce949078e67299d6

Host:
login.sina.com.cn

Origin:
http://weibo.com

Referer:
http://weibo.com/

User-Agent:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19


Query String Parametersview decoded
client:
ssologin.js(v1.3.22)


Form Dataview decoded
entry:
weibo

gateway:
1

from:

savestate:
0

useticket:
1

vsnf:
1

ssosimplelogin:
1

su:
bmlfd2Vpd2VpJTQwMTYzLmNvbQ%3D%3D

service:
miniblog

servertime:
1337774007

nonce:
WSFYJG

pwencode:
wsse

sp:
1dd5068aa2fd9aee6cd7d756227780007d3a0592

encoding:
UTF-8

prelt:
980

url:
http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack

returntype:
META


Response Headersview source
Cache-Control:
no-cache

Connection:
close

Content-Encoding:
gzip

Content-Length:
414

Content-Type:
text/html

Date:
Wed, 23 May 2012 11:53:30 GMT

P3P:
CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"

Pragma:
no-cache

Server:
Apache

Set-Cookie:
SUE=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.sina.com.cn, SUP=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.sina.com.cn, ALF=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.sina.com.cn, ALC=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=login.sina.com.cn, SUR=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.sina.com.cn, SSOLoginState=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.sina.com.cn

Vary:
Accept-Encoding

via_host:
38.62


 
 
2、httpclient 4.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);
	}
}