对于BlogsToWordpress,根据sidong网友的反映,现在登陆人人网,需要输入验证码。
自己去测试了下,自己的账号,没有此问题。试了其提供的他自己的账号,的确有此问题。
而且加上之前添加支持人人网的时候,也偶尔遇到必须输入验证码的问题,因此,索性直接给给人人网中登陆时添加验证码的功能,以彻底解决此问题。
1. 然后就去用IE9的F12去调试,然后相对很容易的找到了对应的url
先是
http://www.renren.com/ajax/ShowCaptcha
再去登陆:
http://www.renren.com/ajaxLogin/login
2.但是后来发现,提供了正确的验证码后,登陆还是错误。
然后就找是否缺少了信息,结果发现一个在提供post data的时候,没有提供_rtk,所以就去找_rtk,最后发现是,访问:
然后可以从:
XN = {get_check:”,get_check_x:’c5f17df8′,env:{domain:’renren.com’,shortSiteName:’人人’,siteName:’人人网’}};
的字段中提取对应的get_check_x,即为后续所需的_rtk。
3.但是最后还是无法正确登陆,因为本身此处通过
http://www.renren.com/ajax/ShowCaptcha
所返回的内容,和IE9调试过程中所看到的一样,都只是个字符“1”,而不是所期望的验证码的图片数据。
所以,也就无法正常的登陆了。
4.然后就继续用IE9去调试,结果始终无法找到是何种原理。
后来无意间换用Chrome调试的时候,对着网页中的验证码右击,选择查看元素:
然后找到了对应的的url地址:
http://icode.renren.com/getcode.do?t=web_login&rnd=Math.random()
其实此地址,之前在IE9中对着验证码图片右击,也看到了,但是却没去细想。
而此时,在Chrome中,找到了此url的返回内容,就是我要的验证码的图片。
接着回到IE9中的F12,也看到了对应的内容:
5.然后接着就容易看懂具体的逻辑了:
(1)先是去访问主页:
其中可以获得get_check_x,即后续的_rtk
(2)接着直接去访问:
http://icode.renren.com/getcode.do?t=web_login&rnd=Math.random()
获得对应的验证码图片。其中,没有向服务器提供任何的cookie和post data。
(3)然后如果你点击了密码输入框的话,就会去调用:
http://www.renren.com/ajax/ShowCaptcha
去显示对应的验证码图片。
其同时会想服务器提供对应的相关post data数据,此post data,除了没有密码和验证码,其他都是一样的。
(4)最后点击登录时,才真正访问:
http://www.renren.com/ajaxLogin/login
去登陆人人网,同时此处当然必须提供对应的密码,以及上述的验证码。
其中,此处的验证码,目前还没有实现,或者说没能力实现程序破解,所以只能通过调用PIL图形库显示出来,让用户手动输入的方式,来获得验证码。
【总结】
人人网的获取验证码的思路,和其他网站很不同。因为一般网站都是对应的getCaptcha或者类似于此处的ShowCaptcha去获得对应的图片的,而人人网是登陆主页时就已获得验证码图片,后来使用ShowCaptcha网址,的确只是Show(显示)此验证码。所以,也算是折腾了一下,才搞清楚其思路。
相关的源码,感兴趣的去这里下载:BlogsToWordpress