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

调用亚马逊商品API返回404状态码的问题咨询

亚马逊商品API调用404问题分析与解决

问题核心

调用意大利站亚马逊deal API时返回404状态码,已从浏览器获取x-api-csrf-token,疑问该token是否是404的诱因,同时计划通过先请求主页面获取有效Cookie和token再发起API请求的方式解决。

Token与404的关联

通常CSRF Token无效会返回403 Forbidden而非404,但亚马逊部分API会在身份验证/验证失败时返回404来隐藏真实原因,因此不能排除token或Cookie无效导致API拒绝服务并伪装成404的可能。

当前代码存在明显问题:

  • 请求头中重复定义了cookie和Cookie(大小写不同),可能导致Cookie信息冲突
  • 手动复制的Cookie和Token大概率已过期,且二者未绑定同一会话(亚马逊的CSRF Token通常与用户会话强关联)

解决方案(匹配你提出的思路)

通过会话保持机制,先请求亚马逊deal主页面获取有效会话Cookie和CSRF Token,再携带这些信息调用API:

修改后的代码

import requests
from bs4 import BeautifulSoup

# 1. 初始化会话,自动管理Cookie
session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0",
    "Accept-Language": "it-IT",
    "Referer": "https://www.amazon.it/"
})

# 2. 请求deal主页面,获取会话Cookie和CSRF Token
main_page_url = "https://www.amazon.it/gp/goldbox"
response = session.get(main_page_url)
response.raise_for_status()

# 解析页面提取CSRF Token(从页面script标签中查找,亚马逊通常将token放在全局变量里)
soup = BeautifulSoup(response.text, "html.parser")
csrf_token = None
for script in soup.find_all("script"):
    if "x-api-csrf-token" in script.text:
        import re
        match = re.search(r'"x-api-csrf-token"\s*:\s*"([^"]+)"', script.text)
        if match:
            csrf_token = match.group(1)
            break

if not csrf_token:
    raise ValueError("Failed to extract x-api-csrf-token from main page")

# 3. 调用目标API,携带有效Cookie和Token
api_url = "https://data.amazon.it/api/marketplaces/APJ6JRA9NG5V4/deals/a4e00097,9c91c27e,7a475971,9800e513,2829d091,c9280e8c,d982787d,7f2e4067,59f38bcb,f3d04636,07d6f3c0,c90c7069,9b103423,a187250b,b0725bd1,d542c309,225ffbf5,a70e896c,16bcaa86,e4a9fef5,3300ae7d,25c13fc2,8212dee8,23a2b0d0,0b97015a,68f59214,8b5662ef,7ed16bc9,1f2c4cff,aaa2b7e6"

api_headers = {
    "Accept": "application/vnd.com.amazon.api+json; type=\"collection(deal/v1)/v1\"; expand=\"details(deal.details/v1),status(deal.status/v1),badge(deal.badge/v1)\"; experiments=\"DealBadgeColors_4da10b4,DealBadgeRounding_8c426ad,DealLabelType_05035b,DealMessageType_024db1\"",
    "Origin": "https://www.amazon.it",
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "no-cors",
    "Sec-Fetch-Site": "same-site",
    "x-api-csrf-token": csrf_token,
    "x-cc-currency-of-preference": "EUR",
    "Pragma": "no-cache",
    "Cache-Control": "no-cache"
}

api_response = session.get(api_url, headers=api_headers)
print(f"Response Status: {api_response.status_code}")
print(f"Response Content: {api_response.text[:500]}")  # 打印前500字符查看结果

关键说明

  • 使用requests.Session()自动管理Cookie,避免手动复制过期Cookie的问题
  • 从主页面动态提取CSRF Token,确保Token与当前会话绑定
  • 移除了重复的Cookie头和不必要的字段,保持请求头简洁有效

额外注意事项

  • 亚马逊会频繁更新页面结构,若Token提取失败,需重新查看页面源码调整正则表达式
  • 若仍返回404,需确认API URL中的deal ID是否有效(部分deal可能已过期下架)
  • 频繁请求可能触发亚马逊反爬机制,建议添加适当延迟

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:55:39