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

Python POST请求无法从Tesco后端获取数据,返回500错误

爬取Tesco爱尔兰站POST请求500错误的排查要点
  • 请求头不能少:浏览器发XHR时会带一堆关键头,比如User-Agent、Content-Type、Referer、X-Requested-With,甚至Cookie。只传payload的话,后端可能认不出这是合法请求,直接返回500。比如Content-Type如果是application/json,你没设置的话,后端解析payload直接报错。

  • payload要保真:复制XHR负载时,注意格式别错——如果是JSON,双引号不能改成单引号,转义字符也不能丢;如果是表单格式,得用urllib.parse.urlencode处理成键值对字符串,别直接传原始文本。

  • 会话Cookie得带:很多网站要求先访问页面拿会话Cookie,再发POST。直接发POST的话,后端觉得你是非法会话,抛出错误。先模拟GET请求目标页面,保存Cookie再带过去发POST。

  • 动态参数要新鲜:payload里可能有timestamp、csrf_token这类动态生成的参数,你复制的旧参数早就失效了。得从当前页面的HTML或者之前的请求里提取最新的,不能直接用旧的。

  • 请求URL和方法别错:确认POST的URL和XHR里的完全一致,路径多一个少一个字符都可能触发500。比如XHR是/api/fruit/list,你写成/api/fruit肯定不行。

  • 检查payload字段完整性:有些请求会藏着__RequestVerificationToken这类防CSRF的字段,复制的时候别漏了,仔细看开发者工具里的Payload/Form Data标签,把所有字段都带上。

另外,打印response.text看看服务器返回的具体错误信息,比如“缺少csrf token”“参数格式错误”,这能直接帮你定位问题。

给个Python示例参考(用requests):

import requests

# 先建立会话,获取Cookie
session = requests.Session()
session.get('https://www.tesco.ie/groceries/en-IE/shop/fresh-food/fresh-fruit')

# 构造完整请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Content-Type': 'application/json',
    'Referer': 'https://www.tesco.ie/groceries/en-IE/shop/fresh-food/fresh-fruit',
    'X-Requested-With': 'XMLHttpRequest'
}

# 确保payload是最新的,动态参数要从页面提取
payload = {
    'categoryId': 'fresh-fruit',
    'pageSize': 24,
    'currentPage': 1,
    'csrfToken': '这里填从页面提取的最新token'
}

# 发送POST请求
response = session.post('https://www.tesco.ie/api/products/list', headers=headers, json=payload)
print(response.status_code)
print(response.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:22:05