pyhon3模拟登录百度(2)—— 使用IE11理清百度登录内部逻辑和分析请求发送数据

来源:互联网 发布:淘宝一天十个访客 编辑:程序博客网 时间:2024/05/17 06:32

依照思路来,第一步就是难点和重点,搞清楚了网页登录的内部逻辑,才能进行下一步的模拟登录。

这里,我的浏览器是IE11。因为已经看了一篇手把手教学分析登录逻辑的文章,所以这里写的要节省多了。


通过分析发现登录的网址是https://passport.baidu.com/v2/api/?login


查看请求正文信息,通过查看该部分信息可以知道向服务器提交了什么数据,然后分析查找这些数据,最后构造出来这些数据,用程序模拟发送,这样就可以完成了模拟登录。

所以重点就集中了搞清楚要发送那些数据,因为数据太多,有些数据可以不必发送(比如缺省值),有些数据虽然有值但是也不必发(比如登录时间等)但是有些数据的值需要顺藤摸瓜查找出来(这些每次登录值都不同,但是这些值又必须要发送才能登录成功),有些值看起来是固定不变的我们就设置成一样的发送就是了。


以下代码为某次登录百度的请求正文:

[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fv3Jump.html&  
  2. charset=utf-8&  
  3. token=7df2c14c85ae5b4ac28e55671d91f835&  
  4. tpl=mn&  
  5. subpro=&  
  6. apiver=v3&  
  7. tt=1412564377876&  
  8. codestring=&  
  9. safeflg=0&  
  10. u=http%3A%2F%2Fwww.baidu.com%2F&  
  11. isPhone=false&  
  12. quick_user=0&  
  13. logintype=dialogLogin&  
  14. logLoginType=pc_loginDialog&  
  15. idc=&  
  16. loginmerge=true&  
  17. splogin=rate&  
  18. username=xxxxxxx&  
  19. password=eqCh%2BjZOsT7dfR%2FLeCrmaU95YOejUlifw5PM1Yt9i0ahYPbgMGHhW%2F3eeGbA3MZpKPVKS8ce9sFNKuStEJr8KTDnzH1zxEL9OyH655VBJ139Jip%2F2clofLPqVfsp1oTSfwFkCSpifCEN9t%2BeM2lAWqbfcoK5O7dbx1N6NjPo1%2FQ%3D&  
  20. verifycode=&  
  21. mem_pass=on&  
  22. rsakey=QNxGSHNrbmjoknFRAniMpPQDfCQaliA8&  
  23. crypttype=12&  
  24. ppui_logintime=448151&  
  25. callback=parent.bd__pcbs__md9bav  


分析数据:

staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fv3Jump.html&

看上貌似乱码后的URL,其实是编码后的结果。在请求发送数据时我们必须用到正规的URL,所以需要找到原先正确的URL,而Python已有相关的模块可以处理。

[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. import urllib.parse  
  2.   
  3. encodeUrl = "http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fv3Jump.html"  
  4. decodeUrl = urllib.parse.unquote(encodeUrl)  
  5.   
  6. print(decodeUrl)  

输出可以得到URL为:http://www.baidu.com/cache/user/html/v3Jump.html

charset=utf-8

摆明编码的值,固定的。按此值发送。

token=7df2c14c85ae5b4ac28e55671d91f835

这个token后面的值一看就不像固定的值,要与不要会不会影响发送,后面才知道,暂时忽略。

tpl=mn

看似固定值,按此值发送。

subpro=

省略。

apiver=v3

API版本号,固定值。按此值发送。

tt=1412564377876

这个token后面的值一看就不像固定的值,要与不要会不会影响发送,后面才知道,暂时忽略。

codestring=

省略。

safeflg=0

安全标志?固定值,按此值发送。

u=http%3A%2F%2Fwww.baidu.com%2F

一个固定URL,但是看似不重要。省略。

isPhone=false

是否手机登录,我用PC,当然False,按此值发送。

quick_user=0

不明,看似固定值,按此值发送。

logintype=dialogLogin

固定值,按此值发送。

logLoginType=pc_loginDialog

固定值,按此值发送。

idc=

省略。

loginmerge=true
不明,按此值发送。

splogin=rate&

不明,按此值发送。

username=xxxxxxxx

用户名,这个就需要填写你的用户名。这里可以用个变量来代替。

password=eqCh%2BjZOsT7dfR%2FLeCrmaU95YOejUlifw5PM1Yt9i0ahYPbgMGHhW%2F3eeGbA3MZpKPVKS8ce9sFNKuStEJr8KTDnzH1zxEL9OyH655VBJ139Jip%2F2clofLPqVfsp1oTSfwFkCSpifCEN9t%2BeM2lAWqbfcoK5O7dbx1N6NjPo1%2FQ%3D

一看密码就是被处理过的,看来需要知道密码如何被处理后,才能正确发送密码值。

verifycode=

省略。

mem_pass=on

是否记住下次登录。按此值发送。

rsakey=QNxGSHNrbmjoknFRAniMpPQDfCQaliA8

RSA的值一想就不是固定的,看来也要想办法得到这个值。

crypttype=12

不明,按此值发送。

ppui_logintime=448151

貌似一个登陆时间的值,省略。

callback=parent.bd__pcbs__md9bav

调用函数,试了几次登录,这个值也是随机的?暂时忽略。

把这些要发送的数据总结成一个清晰的Python代码中如下:

[python] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. postDict = {      
  2.     "staticpage"    :   "http://www.baidu.com/cache/user/html/v3Jump.html",  
  3.     "charset"       :   "utf-8",  
  4.     # "token"           :"7df2c14c85ae5b4ac28e55671d91f835",                    #暂时省略  
  5.     "tpl"           :   "mn",  
  6.     #"subpro"       :   "",  
  7.     "apiver"        :   "v3",  
  8.     # "tt"          :   "1412564377876",        #暂时省略  
  9.     # "codestring"  :   "",  
  10.     "safeflg"       :   "0",  
  11.     # "u"           :   "http%3A%2F%2Fwww.baidu.com%2F&",       #暂时省略  
  12.     "isPhone"       :   "false",  
  13.     "quick_user"    :   "0",  
  14.     "logintype"     :   "dialogLogin",  
  15.     "logLoginType"  :   "pc_loginDialog",  
  16.     # "idc"         :   "",  
  17.     "loginmerge"    :   "true",  
  18.     "splogin"       :   "rate",  
  19.     # "username"        :   username,   # 用户名  
  20.     # "password"        :   password,   # 用户密码  
  21.     "verifycode"    :   "",  
  22.     "mem_pass"      :   "on",  
  23.     # "rsakey"      :   "QNxGSHNrbmjoknFRAniMpPQDfCQaliA8",     #暂时省略  
  24.     "crypttype"     :   "12",  
  25.     # "ppui_logintime": "448151",  
  26.     # "callback"        :   "parent.bd__pcbs__md9bav"           #暂时省略  
  27. };  

综上,剩下的就是找出那些拿不准的值了。其中密码进行了加密,所以加密方法和另一个rsakey参数是急需解决的两个东西。解决这两个问题,留待下一篇阐述。
0 0
原创粉丝点击