1.接口速览
屡次申请发现,t为工夫戳,sign为加密参数,盲猜和data、t无关,sign为32位,盲猜是字符串的32位的MD52.搜寻js代码
这里为搜寻的是appKey,就找到了sign,而后看下面的加密函数,很像MD5,于是进入调试,看看是不是原生的MD53.js调试
调试时,发现传入MD5(假如就是)的参数是几个参数进行了拼接var token = '75f9f56e124f71ee88ab37eb4c636638' //固定的var data = '{"itemId":"677739475107","bizCode":"ali.china.tmall","channel":"pc_detail","pageSize":20,"pageNum":2}' //评论相干的参数,包含商品的ID、评论的页数等var l = 1686368240577 //(new Date()).getTime() //这个就是工夫戳而已var s = '12574478' //这个参数在js的下面能看到是固定的,屡次申请也能发现var p1 = token + "&" + l + "&" + s + "&" + data //进行拼接咱们把下面的拼接后的值去MD5加密看看,待会和网页产生的一不一样,就能晓得,他的加密是不是就是原生的MD5,而没有进行魔改
失去d425068cc80e5528314225bc12c7427f,持续步进js调试,能够看到网页生成的sign和原生的md5加密是一样的
4.模仿申请
import jsonimport reimport timeimport requestsimport hashlibfrom pygments import highlight, lexers, formattersdef get_sign(string): return hashlib.md5(string.encode()).hexdigest()def req(sign,now,data): cookies = { #增加你本人的cookies } headers = { 'authority': 'h5api.m.tmall.com', 'accept': '*/*', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'referer': 'https://detail.tmall.com/', 'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"', 'sec-fetch-dest': 'script', 'sec-fetch-mode': 'no-cors', 'sec-fetch-site': 'same-site', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', } params = { 'jsv': '2.7.0', 'appKey': '12574478', 't': now, 'sign': sign, 'api': 'mtop.alibaba.review.list.for.new.pc.detail', 'v': '1.0', 'isSec': '0', 'ecode': '0', 'timeout': '10000', 'ttid': '2022@taobao_litepc_9.17.0', 'AntiFlood': 'true', 'AntiCreep': 'true', 'preventFallback': 'true', 'type': 'jsonp', 'dataType': 'jsonp', 'callback': 'mtopjsonp3', 'data': data, } response = requests.get( 'https://h5api.m.tmall.com/h5/mtop.alibaba.review.list.for.new.pc.detail/1.0/', params=params, cookies=cookies, headers=headers, ) json_str = re.findall(r'mtopjsonp3\((.*?)\)',response.text) content = json.loads(json_str[0]) formatted_json = json.dumps(content, indent = 4, ensure_ascii = False, sort_keys = True) colorful_json = highlight(formatted_json, lexers.JsonLexer(), formatters.TerminalFormatter()) print(colorful_json)def get_time_13(): return int(time.time()*1000)if __name__ == "__main__": token = '换成你本人的token' pageNum = 1 #1-6页能爬取 data = f'{"itemId":"677739475107","bizCode":"ali.china.tmall","channel":"pc_detail","pageSize":20,"pageNum":{pageNum}}' l = get_time_13() s = '12574478' p1 = token + "&" + str(l) + "&" + s + "&" + data print(p1) sign = get_sign(p1) req(sign=sign,now=l,data=data)
运行后果如下图:
qq探讨群:529528142