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

调用horoguides.com的watch/searchWatches API端点始终返回无效响应的问题求助

API调用返回{'status': 'invalid'}的排查与解决思路

刚帮你梳理了下这个问题,你的代码里有几个关键细节没跟浏览器的实际请求对齐,导致接口返回invalid,咱们一步步拆解:

1. 请求体格式与Content-Type冲突

你在请求头里设置了multipart/form-data类型,但代码里用了json=payload来发送数据——requests的json参数会自动把请求头的Content-Type改成application/json,这就和你手动设置的类型完全矛盾了。浏览器调用这个接口时是用multipart/form-data来传参的,所以得用对应格式构造请求体。

2. Cookie已失效

你代码里的Cookie是抓包时的旧值,像PHPSESSID这类会话Cookie是有有效期的,而且网站会验证会话合法性,旧Cookie大概率已经过期或者失效了,这是返回invalid的常见原因。

3. 请求头格式错误

你写的sec-ch-ua字段格式明显不对:"^\^Chromium^^;v=^\^104^^, ^\^",正常格式应该是类似"Chromium";v="104", "Google Chrome";v="104", "Not A;Brand";v="99"这种,格式错误可能会被服务器的UA检测拦截。

修正后的示例代码

import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder

url = "https://horoguides.com/hk/ajaj/watch/searchWatches"

# 用MultipartEncoder构造标准的multipart/form-data请求体
multipart_data = MultipartEncoder(
    fields={
        "addLimit": "LIMIT 0, 20",
        "addOrder": "ORDER BY establish DESC"
    }
)

headers = {
    'Accept': "application/json, text/javascript, */*; q=0.01",
    'Accept-Language': "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
    'Connection': "keep-alive",
    # 直接用MultipartEncoder生成的content_type,自动包含正确的boundary
    'Content-Type': multipart_data.content_type,
    # 替换成你当前浏览器抓包到的有效Cookie,每次调用前最好重新获取
    'Cookie': "PHPSESSID=your_fresh_session_id; _gid=GA1.2.xxxxxx.xxxxxx; ...",
    'Origin': "https://horoguides.com",
    'Referer': "https://horoguides.com/hk/watch_finder",
    'Sec-Fetch-Dest': "empty",
    'Sec-Fetch-Mode': "cors",
    'Sec-Fetch-Site': "same-origin",
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
    'X-Requested-With': "XMLHttpRequest",
    'sec-ch-ua': '"Chromium";v="104", "Google Chrome";v="104", "Not A;Brand";v="99"'
}

resp = requests.post(url, data=multipart_data, headers=headers)
print(resp.status_code)
print(resp.json())

额外注意事项

  • 务必替换Cookie为当前有效的会话值,建议每次调用前重新抓包获取最新的PHPSESSID和其他Cookie字段。
  • 检查浏览器请求中是否存在CSRF Token等额外验证参数,如果有的话,需要把这些参数也加入到请求体的fields里。
  • 尽量保持所有请求头和浏览器的实际请求完全一致,不要遗漏任何可能的验证字段。

内容的提问来源于stack exchange,提问作者Rapid1898

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:22:38