登錄百度 先清理瀏覽器緩存,打開Charles,登錄一次百度主頁,抓取到登錄過程。 參數分析 確定了需要分析的參數,從哪個開始分析呢?隨意吧 一般有些參數之間是有關係的,比如token的請求參數里需要gid參數 這裡我就不一一去分析參數間的關係了,直接來了啊 參數 gid 一方面其他參數需要它,另外 ...
登錄百度
先清理瀏覽器緩存,打開Charles,登錄一次百度主頁,抓取到登錄過程。
參數分析
確定了需要分析的參數,從哪個開始分析呢?隨意吧
一般有些參數之間是有關係的,比如token的請求參數里需要gid參數
這裡我就不一一去分析參數間的關係了,直接來了啊
參數 gid
一方面其他參數需要它,另外就是這個參數是完全由本地js生成的。先看一下這個參數
搜索一下這個值,沒有。那麼我們再來搜一下這個name,就是gid,之前說過我們一般是找xxx=這種,先來搜一下gid=
點擊loginv4_9f3632a.js,然後在JavaScript頁簽搜索gid=
有好幾個,我圈出了這個getqrcode?請求,為啥捏?看圖,我們找到這個請求
看到請求里的gid值了嗎?跟我們登錄的gid是一樣的,那就確定是這個地方了,gid=e.guideRandom,然後在這個腳本里搜一下guideRandom
然後翻譯一下這個js,這......就自己去琢磨吧
就剩下callback,其他的請求里也需要callback這個
搜一下bd__cbs__,為啥要搜這個?這個真的很痛苦,callback搜出來一大片,而且沒看出來什麼有效數據,值又搜不到,那就搜一半吧,你問我為啥?第六感,不管你信不信,反正我是信了
分析一下這段代碼,基本就是c.getUniqueId這個函數了,搜一下這個函數
oj8k,找到了,代碼貼下麵,為什麼這麼寫?自己查js去,當然有更簡單了pyv8或者psexecjs
Token這裡我要再說一下,參數我們分析完了,你以為請求就成功了嗎?
Oh!yeah,之前我們都是得到所有請求參數就訪問成功了
就這裡卡了我好長時間。那麼碰到這種情況要從那幾個點著手呢,首先我想到的是cookies
然後向上去找Set Cookie的地方
訪問首頁得到四個cookie值,H_PS_PSSID、BIDUPSID、PSTM、BAIDUID
這裡又找到一個BDORZ,首頁很簡單,沒有什麼參數,
註意看這幾個參數,就在上面四個cookies中,t是時間戳,參數都搞定了,那麼Token的cookies也都搞定了,終於可以成功了,圖樣圖森破,還是不行。MMP,cookies搞定都不行,我還有招,請求頭!!!瀏覽器里直接拷過去,看你還想咋的
然鵝....,算你狠,不過我不會輕易認輸的
調試他娘的,一遍一遍又一遍,兩遍三遍四五遍,各種姿勢都試了,終於高潮要來了,特麽的請求不一樣
先上圖
瀏覽器的正常請求
程式發送的請求
看到不一樣了吧,為什麼呢?我們在用requests庫的時候,get請求我比較習慣用.get(url, params=data),參數用params的方式傳入,再來看一下Token請求的參數
getapi是空,那很明顯
data = { "getapi":"", "tpl":"mn", ....}session.get(url, params=data)
然後發送的請求就是/v2/api/?getapi=&tpl=mn&....,實際上正常的請求是/v2/api/?getapi&tpl=mn&...,竟然還有這種操作,我真的是第一次碰到,改一下
data = { "tpl":"mn", ...}url = ".../v2/api/?getapi&{}".format(urlencode(data))session.get(url)
到這裡才算OK了,最後總結了一下,請求的那個坑、請求頭中的Referer、cookies,終於可以說一句OJ8K
參數 dv
為什麼要先說這個dv,首先這個我沒完全破解,另外就算你用固定值,也不影響結果,這個不能詳細說,否則得好幾帖子,我們先搜dv=
切換到javascript頁簽
我們可以搜一下dv_Input這個控制項,它是沒有的,我就不展示了,然後應該就是window.LG_DV_ARG了
這裡有dvjsinput,上圖我們也看到了這個,切換到javascript頁簽看一下
然後打開瀏覽器,清空緩存,打開隱身視窗,打開開發者工具,訪問百度首頁
觀察一下dv值的特點,可以找一些比較有特色的部分搜一下,比如tk、@,這樣儘量減少我們調試js的過程,因為真的很痛苦
在console裡面執行一下這個計算,跟我們dv前面的值是不是類似,那就是它了,不管你是不是我都認為是。然後再搜一下@
剛纔計算的Token+@+Ue(xx),這個肯定就是dv了,至於Ue嘛,我沒搞定,不過發現沒啥意義,寫固定值也可以,也就不用費心去找這個了。
太多了,所以這裡就分割一下,剩下的下一篇再繼續
歡迎關註我的博客或者公眾號:https://home.cnblogs.com/u/Python1234/ Python學習交流
歡迎加入我的千人交流答疑群:125240963