Python 模擬微博登陸,親測有效!
今天想做一個微博爬個人頁面的工具,滿足一些不可告人的秘密。那麼首先就要做那件必做之事!模擬登陸……
代碼是參考了:https://www.douban.com/note/201767245/,我對代碼進行了優化,重構成了Python 3.6 版本,並且加入了大量注釋方便大家學習。
PC 登錄新浪微博時, 在客戶端用JS預先對用戶名、密碼都進行了加密,而且在POST之前會GET 一組參數,這也將作為POST_DATA 的一部分。這樣,就不能用通常的那種簡單方法來模擬POST 登錄( 比如人人網 )。
在提交POST請求之前,需要GET 獲取兩個參數。地址是:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.18)。
得到的數據中有 servertime 和 nonce 的值, 是隨機的,其他值貌似沒什麼用。
通過 httpfox 觀察 POST 的數據,參數較複雜,其中「su" 是加密後的username, sp 是加密後的password,servertime 和 nonce 是上一步得到的,其他參數是不變的。
username 經過了 BASE64 計算:
password 經過了三次SHA1 加密,且其中加入了 servertime 和 nonce 的值來干擾。即:兩次SHA1加密後,將結果加上 servertime 和 nonce 的值,再SHA1 算一次。
將參數組織好,POST請求。這之後還沒有登錄成功,POST後得到的內容中包含一句:
這是登錄失敗時的結果,登錄成功後結果與之類似,不過 retcode 的值是0。接下來再請求這個URL,這樣就成功登錄到微博了。記得要提前build 緩存。
作者簡介:上海小胖,四大諮詢的Tech Lead,MongoDB Professional獲得者。「Python專欄」專註Python領域的各種技術:爬蟲、DevOps、人工智慧、Web開發等。還有「大航海計劃」,各種內推活動。
聲明:本文為作者投稿,版權歸其個人所有。
熱 文推 薦
TAG:CSDN |