继昨日[Java模拟腾讯微博的网页登录失败],终于找到了原因,问题出在登录时u1这个参数上。
在官方的JS中,“http://t.qq.com”是被URL编码后发送的,而我当时以为这个没什么太大关系,所以就直接原文传递了,还是不落大哥一语惊醒梦中人啊:“GET方式不允许有//,你见过那个get方式有//的 ”。 n:-gg
一个低级错误!!!
于是,成功的得到了
ptuiCB(‘0′,’0′,’http://t.qq.com’,'0′);
,接着请求跳转到t.qq.com上去,结果返回的页面竟然是登录页面!!!
这次清空浏览器缓存、cookie等等,重新抓包了一次:
验证码:
GET /check?uin=9920317&appid=46000101&r=0.5222717474862109 HTTP/1.1
Accept: **
Referer: http://ui.ptlogin2.qq.com/login_weibo.html
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: ptlogin2.qq.com
Connection: Keep-Alive
Cookie: ptvfsession=a6c347b95596bebab4d042dd37fec5451fbf58f60dac89894fae2de951fca9c40595acf2c80d0bfb699d11dd38559ab2HTTP/1.1 200 OK
Date: Thu, 24 Jun 2010 16 16:19:05 GMT
Server: Tencent Login Server/2.0.0
Set-Cookie: pt2gguin=o0009920317; EXPIRES=Fri, 02-Jan-2020 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: uin=o0009920317; PATH=/; DOMAIN=qq.com;
Set-Cookie: skey=@S1PU0AL8j; PATH=/; DOMAIN=qq.com;
Set-Cookie: clientuin=; EXPIRES=Fri, 02-Jan-1970 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: clientkey=; EXPIRES=Fri, 02-Jan-1970 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: zzpaneluin=; EXPIRES=Fri, 02-Jan-1970 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: zzpanelkey=; EXPIRES=Fri, 02-Jan-1970 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: ptcz=3922ae737ba492249c275364b7e14210427531e04758cccc9fa5a5542a7871c8; EXPIRES=Fri, 02-Jan-2020 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Set-Cookie: airkey=; EXPIRES=Fri, 02-Jan-1970 00:00:00 GMT; PATH=/; DOMAIN=qq.com;
Pragma: no-cache
Cache-Control: no-cache; must-revalidate
Connection: Close
Content-Type: application/x-javascript; charset=utf-8
ptuiCB('0','0','http://t.qq.com','0');
跳转:
GET / HTTP/1.1
Accept: application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-silverlight, **
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: t.qq.com
Connection: Keep-Alive
Cookie: pt2gguin=o0009920317; uin=o0009920317; skey=@S1PU0AL8j; ptcz=3922ae737ba492249c275364b7e14210427531e04758cccc9fa5a5542a7871c8; mb_june=u0nO3f3CFp4N+OITDhy1GW5rgt7ZghWPsqkD53g43nk4n7aj0Qj6ZF7rQND92Qm4; mb_reg_from=8
HTTP/1.1 200 OK
Date: Thu, 24 Jun 2010 08:19:06 GMT
Server: Apache
Cache-Control: no-cache, must-revalidate
Expires: Thu, 24 Jun 2010 08:19:06 GMT
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 8135
Connection: close
Content-Type: text/html; charset=utf-8
...........
验证码和登录这两步已经成功了,第二步登录后,服务器端又向响应头中写入了几个cookie值,而其中有些值(pt2gguin,uin,skey,ptcz)在第三次用到了,接着第三次服务器端再次向响应头中写入了几个cookie值(mb_june),最后带上这几个cookie整个页面跳转,这才登录成功。
顺着这个思路终于用Java搞定了。