Python實戰案例,requests模塊,Python實現模擬登錄淘寶網 前言 開發工具 環境搭建 登錄流程分析 模擬登錄實現

前言

利用利用Python模擬登錄淘寶網。廢話不多說。

讓我們愉快地開始吧~

開發工具

Python版本: 3.6.4

相關模塊:

re模塊

os模塊

requests模塊;

以及一些Python自帶的模塊。

環境搭建

安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。

登錄流程分析

先給家展示淘寶登錄請求時序圖,方便大家理解

註解:淘寶ua參數:ua(User-Agent)故名用戶代理,淘寶的ua參數加入了瀏覽器、ip、電腦、時間等信息,然後加密生成,在很多地方使用,不僅僅是登錄!

代碼層面考慮將模擬登錄淘寶分爲以下四個步驟

  1. 輸入用戶名後,瀏覽器會向淘寶(taobao.com)發起一個post的請求,判斷是否出現滑塊驗證!
  2. 用戶輸入密碼後,瀏覽器向淘寶(taobao.com)又發起一個post請求,驗證用戶名密碼是否正確,如果正確則返回一個token。
  3. 瀏覽器拿着token去阿里巴巴(alibaba.com)交換st碼!
  4. 瀏覽器獲取st碼之後,拿着st碼獲取cookies,登錄成功

模擬登錄實現

1.判斷是否需要驗證碼

目前我們在登錄淘寶的時候,大多數情況下是不會出現滑塊驗證碼,嘗試了很多次的登錄退出也只是在中間出現過一次,那究竟是什麼在控制是否需要滑塊驗證碼的呢?

從上圖可以看出,當輸入用戶名後,瀏覽器就會發起一個post請求,來驗證是否需要出現滑塊驗證碼,如果返回true,滑塊驗證碼則出現!否則不出現,一般是不會出現!圖中我們可以看到這次post請求上傳了兩個參數:username、ua!前面說過ua爲瀏覽器、ip、設備信息等多信息加密參數,所以猜想淘寶的驗證碼是否出現不僅僅從賬號角度,還有ip、設備等角度!

舉個例子:某臺設備可能出現登錄過大量的賬號,這時候淘寶就可以從ua參數中獲取設備號,然後對該設備進行限制!

知道了流程和請求鏈接及參數之後,我們就可以用代碼來請求了!

2.驗證用戶名密碼

這裏一步也就是上面時序圖圖中的第5步:請求登錄,這裏會將用戶名、ua參數、加密密碼等30十幾個參數post到淘寶(taobao.com)去驗證。

我們來用代碼實現一下,參數很多別被嚇到,都是從瀏覽器複製過來的!

請求結果

可以看到申請st碼鏈接後面帶了一個token

3.申請st碼

上面我們已經申請到了淘寶(taobao.com)的token,這一步就是用token來換取st碼。到這裏很多人可能會有疑問:爲什麼淘寶登錄需要這麼麻煩呢?直接在 taobao.com 登錄不就可以嗎?爲什麼要先在taobao驗證用戶名密碼,通過之後再去 alibaba.com 換取st碼登錄呢?任何公司的框架都是慢慢演變的結果,我猜想最開始的淘寶登錄肯定沒這麼複雜。但是隨着阿里巴巴的慢慢壯大,很多事業線都劃分開來,但是這些事業線之間又有關聯性,比如用戶登錄了淘寶賬號之後天貓就不需要再登錄(注意淘寶和天貓的頂級域名不同,所以不能共享cookis)爲了實現這個功能,單點登錄就出現了。

單點登錄(Single Sign On),簡稱爲 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。 ——百度百科

很多大企業幾乎都有做單點登錄,那阿里的單點登錄系統肯定是由母公司阿里巴巴(alibaba.com)來做啦,所有子公司去調用母公司接口!我們再回來分析淘寶登錄爲何要如此複雜就很好理解了:用戶數據在淘寶這裏,所以需要現在淘寶(taobao.com)驗證用戶名和密碼,驗證通過生成一個token,瀏覽器拿着token去和阿里巴巴(alibaba.com)申請單點登錄碼(st碼),阿里巴巴收到請求驗證token通過則返回st碼,所以用token換st碼的原因就在於單點登錄!理解了設計原理之後,代碼實現起來就很清晰了!

4.使用st碼登錄

成功獲取st碼之後我們就可以來登錄了,這一步是通過st碼獲取登錄的cookies。

到這裏我們就已經模擬登錄淘寶成功了!

5.獲取淘寶暱稱

其實上面我們就已經登錄淘寶成功並返回用戶主頁的鏈接,我們爲了進一步驗證登錄成功,就請求一下淘寶用戶主頁,順便把淘寶暱稱提取出來吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章