下午好🌅🌅🌅
本答案参考ChatGPT-3.5
针对你的问题,我可以给出以下解答:
-
这里的log_id和t参数是时间相关的,也就是说每个请求都应该带上对应的时间戳,可以使用time.time()获取,但是还需要乘上1000才能得到毫秒级别的时间戳,具体可以参考代码中的写法。在负载数据中加上这些参数能够正常获取响应,如果你之前修改了url中的这些参数但是没有成功获取到响应,可能是因为参数没有正确地加入到请求中。
-
h5st参数是一个sign值,用于保证请求的安全性,在每个请求中应该都是不同的。如果你使用相同的h5st但是时间超过了一定范围,可能导致请求失败。具体时间范围因为京东没有公开说明,因此你需要自己进行尝试。
-
代码中负载参数的具体内容和个数可以根据具体情况进行调整,不一定要和你使用的负载参数相同。可能是因为他的请求需要的参数比较多,因此加入了一些额外的参数。
-
代码中使用的json是将一个Python字典dump成json字符串的结果,这也是requests库中常用的传递负载数据的方式之一。代码中多出来的api是请求的域名,也就是京东提供的API接口地址。
以下是修改后的代码示例:
import time
import json
import requests
headers = {
'Origin': 'https://search.jd.com',
'Referer': 'https://search.jd.com/',
'Cookie': 'm=jdu1702420481408866201700; shshshfpa=621799a7-c063-deab-9258-247e09619f57|1702120483; shshshfpb=4bOI1tGvz4fD3bfiPNMbSmw%3D%3D; shshshfpc=d680f97766844e7f64affad5080b99d2; shshsID=5f95f5c34395d6f5c08ad793d3a23dc9_4_1713119744095',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0;Win64;x64)AppleWebKit/537.36 (KHTML,Like Gecko)Chrome/123.0.0.0 Safari/537'
}
keyword = '5g手机'
pvid = '6a232e7f38ba4979941b1746c02d4ce7'
page = 1
S = (page - 1) * 30 + 1
log_id = int(time.time() * 1000)
t = int(time.time() * 1000)
h5st = '3' + str(t) + '_' + str(log_id)
body = {
"keyword": keyword,
"pvid": pvid,
"isList": 0,
"page": page,
"s": S,
"click": "0",
"log_id": log_id,
"show_items": ""
}
data = {
'functionId': 'pc_search_s_new',
'client': 'pc',
'clientVersion': '1.0.0',
'o2o': '0',
'area': '19_1601_50258_129167',
'appid': 'search-pc-hot',
'body': json.dumps(body, ensure_ascii=False),
'loginType': '3',
'geo': '',
'eid': '',
'fp': '',
'nbf': '',
'osName': '',
'osVersion': '',
'networkType': '',
'uuid': '',
'abtest': '',
'host': '',
'refer': '',
't': t,
'h5st': h5st,
'xtest': '',
'callback': ''
}
url = 'https://api.m.jd.com/api'
response = requests.get(url, params=data, headers=headers)
print(response.text)