Postman可正常返回数据的Python GET请求代码无法运行问题排查
问题分析:Postman可正常请求的API在Python requests中失效
我有一个在Postman中可正常返回数据的URL:
https://www.tablebuilder.singstat.gov.sg/api/table/resourceid?isTestApi=true&keyword=manufacturing&searchoption=all
但Postman生成的以下Python代码无法运行:import requests url = "https://www.tablebuilder.singstat.gov.sg/api/table/resourceid?isTestApi=true&keyword=manufacturing&searchoption=all" response = requests.request("GET", url) print(response.text)该代码过去曾正常工作,请问可能的原因是什么?是否有永久修复方案?
可能的原因
- URL转义字符错误:Postman生成的URL里把
&转成了HTML实体&,直接用在Python请求中会被服务器当成参数的一部分,导致参数解析混乱(比如实际请求的参数变成isTestApi=true和amp;keyword=manufacturing,而非预期的keyword=manufacturing)。 - 请求头差异触发反爬:Postman会自动带上浏览器风格的请求头(如
User-Agent、Accept),而Python requests的默认请求头可能被服务器识别为非合法请求,触发拦截机制。 - API接口规则变更:目标网站可能更新了API的参数要求、认证方式或访问限制,旧的请求逻辑不再符合当前接口规范。
修复方案
1. 修正URL转义字符
把URL中的&替换回&,确保参数能被服务器正确解析:
import requests url = "https://www.tablebuilder.singstat.gov.sg/api/table/resourceid?isTestApi=true&keyword=manufacturing&searchoption=all" response = requests.get(url) print(response.text)
2. 模拟浏览器请求头
如果修正URL后仍失效,添加浏览器样式的请求头绕过反爬拦截:
import requests url = "https://www.tablebuilder.singstat.gov.sg/api/table/resourceid?isTestApi=true&keyword=manufacturing&searchoption=all" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Accept": "application/json, text/plain, */*" } response = requests.get(url, headers=headers) print(response.text)
3. 验证API接口状态
检查目标网站的官方文档(若存在),确认参数规则、认证要求是否发生变更。如果接口新增了认证机制,需在请求中添加对应的令牌或认证信息。
永久修复建议
- 避免直接复制Postman生成的带HTML转义的URL,手动检查并修正转义字符;
- 统一使用
requests.get()简化代码,同时保持请求头与主流浏览器一致; - 定期测试接口连通性,出现失效时优先排查参数格式、请求头和接口规则变化。
内容的提问来源于stack exchange,提问作者prashanth manohar
相关产品推荐
相关产品推荐

