之前遇到一个问题,token读取不到,读到的是“the fisrt two args should be string type 0,1”,后来发现是没有携带BAIDUID的cookies去访问http://passport.baidu.com/v2/api/,故得不到token的值。
然后用python自带的urllib2和cookiesJar尝试登录百度,明明设置了Connection为Keep-Alive,抓包的时候还是发现Connection为close。
查了一下,有的网友说urllib2不支持长连接,推荐requests库。而且response body还是“err_no=100023”,我输出密码抓了一次包,发现err_no=4,看来不是密码的问题。头疼!
通过访问“www.baidu.com”获取到BAIDUID的cookies,
之后通过携带BAIDUID访问http://passport.baidu.com/v2/api/又获取到token,
最后通过携带token访问http://passport.baidu.com/v2/api/?login又获取到rsakey,
按理说都齐活了,为什么会出现err_no=100023的问题?
换成requests后,问题依旧,只不过connection不是close了。
===============更新与2014.04.27===========
送走老弟终于有时间捣鼓这个err了。
通过用httpdebugger调试工具对比过后,原来是我在login——也就是最后一步登录的时候没有携带cookie,五个cookie:BAIDUID、BIDUPSID、H_PS_PSSID、HOSUPORT和UBI。如果你登录遇到不是err_no=4的错误的话,那说明肯定是你的cookie有问题,要么就是没有开启cookies所以不能登录。静下心来仔细检查一下,肯定会发现的。
不过新问题也出现了,那就是err_no=4的问题,这是密码和用户名不匹配的问题。我是传递的明码,所以会出现err_no=4也在意料之中,下一步就想象怎么解决获取加密密码的问题。