Python requests发送POST请求响应与Chrome网络面板不一致如何解决
问题原因
- 缺失必要请求头字段:接口会校验
Referer、User-Agent、X-Requested-With(标识AJAX请求)等字段,requests、Postman发起的默认请求没有对应字段会被拦截,跳转至首页。 - 请求参数格式错误:你直接将嵌套的params字典放入表单参数中,requests会将params字段序列化为Python字典的原生字符串表示,与接口要求的JSON格式字符串不匹配,导致参数校验失败。
- 缺失有效身份Cookie:若接口需要登录权限,Chrome中已保存了生效的登录Cookie,而requests、Postman的请求未携带该Cookie时会被重定向到首页。
解决方法
- 从Chrome中导出完整请求头:在网络面板找到对应请求,右键选择「复制」→「复制为cURL(bash)」,提取其中的
User-Agent、Referer、Cookie、X-Requested-With、Accept等字段,填入代码的headers参数中。 - 修正参数序列化方式:将params字段对应的字典用
json.dumps()序列化为标准JSON字符串后,再放入表单提交。 - 解析响应时优先使用
.json()方法,避免手动处理文本格式的JSON数据。
修正后的代码示例:
import requests import json uid = "23415191" url = "https://info.gbfteamraid.fun/web/userrank" # 替换为从你自己Chrome请求中提取的实际请求头内容 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Referer": "https://info.gbfteamraid.fun/", "Accept": "application/json, text/javascript, */*; q=0.01", "X-Requested-With": "XMLHttpRequest", "Cookie": "替换为Chrome中该请求携带的Cookie内容" } payload = { "method": "getUserDayPoint", "params": json.dumps({"teamraidid":"teamraid056","userid":uid}) } response = requests.post(url, data=payload, headers=headers) honors = response.json() print(honors)
Postman测试解决方案:直接将从Chrome复制的cURL导入Postman,无需手动配置参数和请求头即可发起符合要求的请求,得到预期JSON响应。
内容的提问来源于stack exchange,提问作者poplole
相关产品推荐
相关产品推荐

