steamdb爬取時,需要驗證cookie,分析可知cookie有效時間爲一天
接下來開始正文,分析cookie如何獲取。
一. 網站訪問需求
經嘗試得知,網站主要驗證cookie中的 __cfduid 與 cf_clearance
只有倆同時有,網站才能正常訪問。
二. 分析網站邏輯
2.1 接下來分析,__cfduid 與 cf_clearance 是如何得到的
可以看出,在訪問網站時,進行了倆次訪問。第一次訪問時,返回了503,在第二次訪問時,返回了200。
第一次訪問時,不帶cookie, 進行get, 返回了503 ,以及 cookie中的__cfduid值。
第二次訪問時,爲post, 分析可以看出,cf_clearance值就是在這次請求中返回的。只要解決掉這次post就可以得到cf_clearance。
2.2 分析第二次post的網址以及參數是如何得到的。
這次post,需要知道的有:
1.請求字符串,就是網址後面的一串,經嘗試,每次請求都是不同的。
2. 表單數據 r、jschl_vc、pass、jschl_answer
既然每次請求均不同,且我們只訪問了倆次網址,那麼,這些參數必然是第一次get時返回的信息中獲取的。
2.3 分析第一次get返回的信息
嘗試分析,第一次get返回的數據,在form表單中,我們可以很明顯的獲取 請求字符串,r、jschl_vc、pass 的值,但是jschl_answer 並沒有值,繼續分析返回的數據,
在網站的js中,我們可以發現這麼一行,a = document.getElementById('jschl-answer'); 從頁面中獲取jschl-answer元素。
在後續的js中,還可以發現 a.value = (+JAdEwio.gi).toFixed(10); '; 121;
得出,jschl-answer 的值是經過js計算得出的。
這樣,我們就得到了第二階段 post的地址,以及參數
2.4 進行第二次請求,獲取cf_clearance
進行第二次請求,網站返回 cf_clearance 值,至此,通過攜帶cf_clearance與__cfduid,我們便可以任意的訪問steamdb網站,獲取我們需要的信息。
### 需要注意 如果是第一次訪問,__cfduid在第一次和第二次直接會進行一次改變,記得更新。###