使用Python Requests调用Segari API返回400(签名不匹配)求助
Segari网站API爬取签名不匹配问题解决求助
我尝试爬取Segari网站的禽类分类页面(https://segari.id/c/unggas),使用Python Requests调用以下API接口:
import requests url = "https://api-v2.segari.id/v1.1/products/price?agentId=311&tagIds=838&size=999&page=0&paginationType=slice&totalPriceBefore=0&deliveryDate=2023-10-26&deliveryServiceType=NEXT_DAY_DELIVERY&pageOrigin=clp" headers = { 'Referer':'https://segari.id/', 'Sec-Ch-Ua':'"Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"', 'Sec-Ch-Ua-Mobile':'?0', 'Sec-Ch-Ua-Platform': '"Windows"', 'Sec-Fetch-Dest':'empty', 'Sec-Fetch-Mode':'cors', 'Sec-Fetch-Site':'same-site', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'X-Segari-Pathname':'/c/unggas', 'X-Segari-Platform':'web', 'X-Segari-Sec': 'v1:MjAyMy0xMC0yNVQxMzoxODozNS40OTQwMDArMDc6MDA=:96a10a8bbb9f47b8cfb1db7bd3ad483632ede18b0631de80e9720e30d4928f07' } response = requests.get(url, headers=headers) # 响应返回 <Response [400]> # 响应内容:{"message":"04 - Signature Mismatch","code":"TODO","data":null,"errors":null}
请求返回**<Response [400]>,响应内容显示"04 - Signature Mismatch"**,推断问题出在X-Segari-Sec请求头。注意到网站会请求https://api-v2.segari.id/v1/util/server-time获取服务器时间,我已尝试模拟JavaScript逻辑生成该字段:
import base64 import hashlib def get_X_segar_sec(hash_key, timestamp): hash_key = "wCL8iD2xgQ5EdLrVBEYvAP3nRxX3q6TSNjIlISOx7PTphdhA78M2cjlN5RISAHwn" base64_encoded_timestamp = base64.b64encode(timestamp.encode()).decode() hash_string = f"{hash_key}{base64_encoded_timestamp}" hash_value = hashlib.sha256(hash_string.encode()).hexdigest() return f"v1:{base64_encoded_timestamp}:{hash_value}"
但调用后仍然返回400错误。同时尝试用Selenium爬取,但加载的数据和页面显示不符,目前尝试通过Selenium捕获Cookie并传入API:
from requests import Session cookies = driver.get_cookies() # 创建Requests会话对象 session = Session() # 向会话添加Cookie for cookie in cookies: session.cookies.set(cookie['name'], cookie['value'])
求助如何解决签名不匹配问题,获取200响应?
内容的提问来源于stack exchange,提问作者Hal
相关产品推荐
相关产品推荐

