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

如何成功连接GOAT API端点?解决Python Requests 403错误

解决Goat API 403错误(CSRF Token处理)
  • 问题核心:Goat的API接口需要验证CSRF Token,直接请求API会被拦截返回403,必须先从主站获取有效Token并携带在请求中。
  • 解决步骤:
    1. 使用requests.Session()维持会话,自动管理Cookie
    2. 先访问Goat主页获取包含CSRF Token的Cookie或页面内容
    3. 提取Token并添加到请求头的X-CSRF-Token字段
    4. 携带会话Cookie和Token发送API请求

修改后的代码示例:

import requests
from bs4 import BeautifulSoup

# 初始化会话,自动保存Cookie
session = requests.Session()

# 先访问主页获取CSRF Token和必要Cookie
main_url = "https://www.goat.com"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36"
}
main_response = session.get(main_url, headers=headers)

# 从页面meta标签提取CSRF Token(若Cookie中无对应字段时使用)
soup = BeautifulSoup(main_response.text, "html.parser")
csrf_token = soup.find("meta", {"name": "csrf-token"})["content"]

# 构造API请求头,添加CSRF Token
api_url = "https://www.goat.com/web-api/v1/product_variants/buy_bar_data?productTemplateId=884794&countryCode=US"
api_headers = {
    **headers,
    "X-CSRF-Token": csrf_token,
    "accept": "application/json",  # API返回JSON,无需HTML类型的accept头
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin"
}

# 发送API请求
response = session.get(api_url, headers=api_headers)
print(f"响应状态码: {response.status_code}")
print(f"响应内容: {response.json()}")
  • 额外注意:
    • 若CSRF Token存放在Cookie的_csrf或类似字段中,可直接从会话Cookie提取:csrf_token = session.cookies.get('_csrf')
    • 若仍返回403,需检查是否遗漏Referer等请求头,或网站存在JS验证、指纹识别等更复杂的反爬机制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:45:29