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 json
import re
import time
import requests
import hashlib
from pygments import highlight, lexers, formatters
def 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