依照思路來,第一步就是難點和重點,搞清楚了網頁登陸的內部邏輯,才能進行下一步的模擬登陸。html
這裏,個人瀏覽器是IE11。由於已經看了一篇手把手教學分析登陸邏輯的文章,因此這裏寫的要節省多了。python
經過分析發現登陸的網址是https://passport.baidu.com/v2/api/?loginapi
查看請求正文信息,經過查看該部分信息能夠知道向服務器提交了什麼數據,而後分析查找這些數據,最後構造出來這些數據,用程序模擬發送,這樣就能夠完成了模擬登陸。瀏覽器
因此重點就集中了搞清楚要發送那些數據,由於數據太多,有些數據能夠沒必要發送(好比缺省值),有些數據雖然有值可是也沒必要發(好比登陸時間等)可是有些數據的值須要順藤摸瓜查找出來(這些每次登陸值都不一樣,可是這些值又必需要發送才能登陸成功),有些值看起來是固定不變的咱們就設置成同樣的發送就是了。安全
如下代碼爲某次登陸百度的請求正文:服務器
分析數據:函數
staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fv3Jump.html&
post
看上貌似亂碼後的URL,實際上是編碼後的結果。在請求發送數據時咱們必須用到正規的URL,因此須要找到原先正確的URL,而Python已有相關的模塊能夠處理。ui
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代碼中以下: