模拟登录-以新浪微博为例 新浪微博登录失败
利用HttpFox监视并且分析所有进出浏览器的HTTP网络传输。HttpFox是FireFox浏览器的一个插件,监视Http网络数据传输很方便。请求的数据包括:
(1) 请求和响应头数据
(2) 发送和接收的Cookie
(3) 查询Query的各项参数
(4) POST的参数和数据
(5) 响应Body数据
(6) ......
监视新浪微博登录时和服务器的数据传输情况。如图1所示
图 1 登录新浪微博Http网络传输数据
(1) 分析登录过程,在提交POST请求之前,进行了两次GET请求,第二次GET请根据浏览器的不同传递不同数据,没意义。如图1第一次GET请求地址是:http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=c3dqdHV6dyU0MGdtYWlsLmNvbQ%3D%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.5)&_=1370244920303
如图5-1下部分。得知返回数据:sinaSSOController.preloginCallBack({"retcode":0,"servertime":1370244920,"pcid":
"xd-fec4e580e9a32b605d0027a0269d765d05a9","nonce":"IFO817","pubkey":
"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","showpin":0,"exectime":8})
整理数据如表1 所示
表1 第一个GET请求返回数据
参数名
值
retcode
0
servertime
1370244920
pcid
xd-fec4e580e9a32b605d0027a0269d765d05a9
nonce
IFO817
pubkey
EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E
7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFF
B38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6
442443
rsakv
1330428213
showpin
0
exectime
8
经查询资料,表1中有两个重要参数“servertime”和“nonce”,其他为固定值。
(2) 观察POST请求:
如图5-2所示可知POST请求的数据包括的一些信息。
图2 POST数据包参数和值
其中“su”为用户名,它经过BASE64计算。“sp”为密码,其加密方法为:
先创建一个rsa公钥,公钥的两个参数新浪微博都给了固定值,不过给的都是16进制的字符串,第一个是登录第一步中的pubkey(见表1),第二个是js加密文件中的‘10001’。这两个值需要先从16进制转换成10进制。然后再servertime加上nonce加上用户密码进行RSA加密。
(3) 模拟登录
通过研究新浪微博登录的过程,就可以伪造一个HttpClient实例进行登录了。
①构造一个HttpClient实例:
DefaultHttpClient client = new DefaultHttpClient();
②构造第一个登录请求:获取servertime和nonce的值。
③对用户名和密码进行加密
String pwdString = servertime + "t" + nonce +"n" + "pwd";
sp = new BigIntegerRSA().rsaCrypt(SINA_PK,"10001",pwdString);
④构造POST数据包。
HttpPost post = new HttpPost( "http://login.sina.com.cn/sso/login.php?client=ssologin.js (v1.4.2)");
……
post.setEntity(newUrlEncodedFormEntity(nvps, HTTP.UTF_8)); ①
⑤执行POST请求。
HttpResponse response=null;
……
response= client.execute(post);
⑥获取实际URL,并请求该URL。
String entity=null;
……
entity =EntityUtils.toString(response.getEntity());
……
String url =entity.substring(
entity.indexOf("http://weibo.com/sso/login.php?"),
entity.indexOf("code=0")+ 6); // 获取到实际url进行连接
HttpGet getMethod= new HttpGet(url);
……
response =client.execute(getMethod);
⑦获取Cookie。
CookieStore cookie = client.getCookieStore();
通过以上步骤模拟登录就处理完了,可以通过最后获取的Cookie信息进行新浪微博页面的访问,只需要在请求页面的时候将此Cookie发送过去身份认证就完成了。通过身份认证就可以对新浪微博的页面进行访问了。
更多阅读
如何从星盘看职业:以一张星盘为例
下面是若道占星工作室第一期中英文资质考试的一道论述题,很高兴大多数同学都答得不错。我写了一个参考答案,也许能帮助大家进一步打开思路。 伊莎贝拉1979年12月28日晚上8点生于哥伦比亚的麦德林市。研究她的星盘,用四个段落讨论她
曹海军 霍伟桦:大学人事制度改革——以清华大学经济管理学院为例 上海粮食局曹海军
大学人事制度,主要是指大学教师人事制度。大学的使命是教学和研究,这个使命主要是由教师完成的,所以教师是大学中最重要的财富。建设一流大学,必须要有一流的教师。由于大学教师人事制度直接影响到大学教师的选择、对教师的激励和教师的
模拟登录-以新浪微博为例 新浪微博登录失败
在很多情况下,网站的访问都需要用户登录,要想通过程序获取页面信息(比如说爬虫)就必须通过模拟登录来实现。下面是我对新浪微博的模拟登录的一些研究。利用HttpFox监视并且分析所有进出浏览器的HTTP网络传输。HttpFox是FireFox浏览器的
智能手机通讯录转换VCF名片-乱码解决办法以索爱M600→K530C为例 iphone导入vcf通讯录
本以为把索爱M600内存卡里vcf文件通过读卡器放在K530C内存卡里/others/contacts文件下就Ok啦,结果太不给了啦...一、K530C名片夹,通过从内存卡恢复结果显示:0个名片被复制。二、上网搜索,知道两个手机系统不一样,于是就通过软件VCFEnco
中国古代史籍的一个通病:夸大兵力——以长平之战为例
本人关注长平之战已久,因对军事动员、后勤较为了解,更兼阅读了近年大量的研究文献,遂以此战为例,点破中国古代史籍夸大兵力的通病。一、长平之战过程还原此战记载,一般追溯至《史记》的《白起王翦列传》,《廉颇蔺相如列传》亦有所涉及。