如何成功连接GOAT API端点?解决Python Requests 403错误
解决Goat API 403错误(CSRF Token处理)
- 问题核心:Goat的API接口需要验证CSRF Token,直接请求API会被拦截返回403,必须先从主站获取有效Token并携带在请求中。
- 解决步骤:
- 使用
requests.Session()维持会话,自动管理Cookie - 先访问Goat主页获取包含CSRF Token的Cookie或页面内容
- 提取Token并添加到请求头的
X-CSRF-Token字段 - 携带会话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验证、指纹识别等更复杂的反爬机制
- 若CSRF Token存放在Cookie的
内容的提问来源于stack exchange,提问作者yggloo
相关产品推荐
相关产品推荐

