前言
由于作業需要,要抓取tb上某個介面的文案資源,用來分析借鑒,
本來想著,無非就是驗證一下當前用戶資訊之類的,但在研究過后,發現并沒那么簡單,
1,查看請求相關引數
比如下圖,發現請求中攜帶的引數不少,然后其中隨時變化的就有t、sign、data,
很明顯,這就是tb判斷請求是否合法的引數,其中但凡修改一點,就會提示非法請求,

2,開始查找處理加密的代碼
既然大概猜到這些是加密引數,那就開始在js檔案中查找sign,果不其然,找到這么一段,
很明顯可以看出,sign引數就是由四個已有引陣列成的字串放入h()加密函式中生成的,
在斷點查找后確認,d.token是存在 tb cookies中的某段標識,i 是實時生成的字符戳,g 就不必多說,
最后data中的一大段引數就得復制原有格式,再動態修改某些變數,比如分類id等等,

3,嘗試生成加密引數模擬請求
經過上面的研究,基本理清了這個加密引數的邏輯,至于加密函式h(),看不懂也沒所謂,直接復制后拿來用,
根據原有代碼照著找齊四個引數,然后送入加密函式,就能得到回傳的sign引數,
拿齊引數后,就能開始模擬請求,拼湊url啦,除了上面看得見的引數,還有當前tb用戶的cokies也要一并隨著請求發出,
不然就會驗證為非法請求哦,這里我用js實作了大概的邏輯代碼,
另外還用上了獲取token啊、生成某段字符、加密的函式,太長了我就不貼了,
let temp = (new Date).getTime() , appKey = '12574478' , token = this.getCookie("_m_h5_tk").split("_")[0] , e = "v1-" + d() + "-" + String(Date.now() - 9) , data = '{"curPageUrl":"https%3A%2F%2Fweb.m.taobao.com%2Fapp%2Ftb-windmill-app%2Fyouhaohuo%2Fhome%3Fbs%3D13","appId":"6696424","tab":' + this.value + ',"topic":"selected_crowd","tabId":' + this.value + ',"type":"selected_crowd","userId":"-1","params":"{\\"v\\":\\"new\\",\\"resId\\":\\"6696424\\",\\"bizId\\":\\"2020\\",\\"pageNo\\":1,\\"type\\":\\"selected_crowd\\",\\"pageSize\\":20,\\"contentIds\\":\\"\\",\\"home_clickItemId\\":\\"\\",\\"tab\\":' + this.value + ',\\"tabId\\":\\"' + this.value + '\\",\\"clickedIds\\":\\"\\",\\"bizCode\\":\\"steins.goodItem\\",\\"src\\":\\"phone\\",\\"showAllCrowd\\":true,\\"preExposeItems\\":\\"\\"}","resId":"6696424","backupParams":"tabId,type,userId","pvuuid":"' + e + '","__pvuuid":"' + e + '","_pvuuid":"' + e + '"}' if (this.value != '0') { data = '{"curPageUrl":"https%3A%2F%2Fweb.m.taobao.com%2Fapp%2Ftb-windmill-app%2Fyouhaohuo%2Fhome","appId":"6696424","tab":"' + this.value + '","topic":"selected_crowd","tabId":"' + this.value + '","crowdId":"' + this.value + '","type":"selected_crowd","userId":"-1","params":"{\\"v\\":\\"new\\",\\"resId\\":\\"6696424\\",\\"bizId\\":\\"2020\\",\\"pageNo\\":1,\\"type\\":\\"selected_crowd\\",\\"pageSize\\":20,\\"contentIds\\":\\"296620907314\\",\\"home_clickItemId\\":\\"\\",\\"tab\\":\\"' + this.value + '\\",\\"tabId\\":\\"0\\",\\"clickedIds\\":\\"\\",\\"bizCode\\":\\"steins.goodItem\\",\\"src\\":\\"phone\\",\\"showAllCrowd\\":true,\\"preExposeItems\\":\\"\\",\\"crowdId\\":\\"' + this.value + '\\"}","resId":"6696424","backupParams":"tabId,type,crowdId,userId","pvuuid":"' + e + '","__pvuuid":"' + e + '","_pvuuid":"' + e + '"}' } let j = h(token + "&" + temp + "&" + appKey + "&" + data) data = encodeURIComponent(data) let page_url = 'https://h5api.m.taobao.com/h5/mtop.tmall.kangaroo.core.service.route.aldlampservicefixedres/1.0/?jsv=2.6.2&appKey=' + appKey + '&t=' + temp + '&sign=' + j + '&timeout=6000&api=mtop.tmall.kangaroo.core.service.route.AldLampServiceFixedRes&type=jsonp¶ms=%5Bobject%20Object%5D&dataType=jsonp&v=1.0&preventFallback=true&callback=mtopjsonp1&data='https://www.cnblogs.com/lishuh/archive/2022/11/28/+ data axios.get(page_url) .then(response => { console.log(response) })
總結
其實很多時候在遇到這種問題時,缺的只是一個思路,當思路打開后會發現,原來這加密引數也沒多難啊??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/538663.html
標籤:其他
上一篇:記錄--uniapp微信小程式引入threeJs并匯入模型
下一篇:淺拷貝和深拷貝
