爲啥要寫這一篇文章呢?
(主要是qq羣內有人在模擬登錄知乎,一直不成功)而後我抓包看了下,發現知乎登錄頁已經改版了,並且難度大大提升了。css
首先內,仍是打開知乎首頁,而後輸入帳號密碼,登錄(記得輸錯密碼)python
這樣咱們就能夠看到請求頭了(請求頭以下) chrome
咱們發現有這幾個請求頭和正常的不同(紅色框中的)瀏覽器
authorization
(感受應該是js生成的,後面再看Content-Type
(後面多了boundary=xxx 這種,那這種是啥意思呢,後面和請求參數一塊兒看cookie
:這個要注意,登錄前cookie就不爲空,說明以前確定有set-cookie的操做x-udid,x-sxrftoken
這兩個都是驗證參數,估計都在網頁源代碼能找到再看一下請求參數bash
能夠看到參數是以payload的形式出現的微信
第一次看到這種的人估計會一臉懵逼cookie
這個要結合請求中的session
Content-Type:
multipart/form-data; boundary=----WebKitFormBoundary2KNsyxgtG28t93VF
複製代碼
來一塊兒看python爬蟲
multipart/form-data
是一種表單提交的方式,後面的boundary=xxx 是表單分割的方式,那到底啥意思呢?看一個簡單的小列子你就能明白啦加密
------WebKitFormBoundary2KNsyxgtG28t93VF
是分割不一樣參數的,因此能夠直接不看他(這個是由上面的Content-Type後面的boundary決定的,能夠隨便修改)
那把分割線去掉後,上面的就至關於 client_id=c3cef7c66a1843f8b3a9e6a1e3160e20
,
grant_type=password
.
那麼這個payload就很好理解了.
咱們來看一下,一共有哪些參數
參數還挺多的,能夠看到不少參數都是固定的,如帳號,密碼,時間戳,等等
變更的有兩個 client_id,signature
authorization
:
咱們在chrome內,直接按ctrl+shift+f(全局搜索,搜索js,css這些),能夠看到已經搜索到了,而且是直接寫在js裏面的,而後從新隨便換個帳號再抓一次包,發現authorization 的值仍是固定的,因此說明authorization 是直接寫在js裏面的,不是動態修改的(那麼authorization 的值咱們就已經找到了)
cookie
:
在登錄以前,就發現cookie的值不爲空,說明確定打開網頁後就有set-cookie的操做了,咱們想驗證的話,先打開一個無痕瀏覽器(主要是爲了把以前的cookie所有清空,避免干擾),而後打開zhihu.com,咱們發現他有幾回set-cookie的動做
那咱們想要模擬的話,很簡單的方法是直接使用requests.session
x-udid,x-sxrftoken
:
通常這種驗證參數都會在網頁源代碼裏面,因此直接查看網頁源代碼
能夠看到已經找到了,後續就是如何把這個找出來而已,可使用正則,或者xpath定位到
client_id
:
你會發現client_id與上面的authorization 如出一轍
signature
:
仍是使用ctrl+shift+f 全局搜索
發現找到了,可是參數是js動態生成的...
主要是找到如何加密的,而後使用Python模擬出來
第一步:下載這個js,格式化(讓代碼好看一些)
第二步:使用fiddle替換掉原來的js,使用剛剛格式化的js
第三步:慢慢調試。。。直到找到如何生成的...
大概步驟是這樣
可是假如你js像我同樣很渣的話,你能夠直接找到這段加密的js,而後Python執行這段js就能夠了。。。
代碼請關注微信公衆號【python爬蟲分享】,發送「知乎登錄代碼」可見~~~