You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:38:36