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

为何Python requests模块调用API返回504,Postman却正常返回200?

解决Python请求API返回504而Postman正常的问题

以下是针对企业应用场景的排查和解决步骤:

1. 配置企业代理

企业网络通常强制使用代理,Postman可能自动拾取系统代理,但requests默认不会。可以手动指定代理,或者自动读取系统代理:

  • 手动设置代理:
import requests

proxies = {
    "http": "http://企业代理地址:端口",
    "https": "http://企业代理地址:端口"
}
response = requests.post("目标API地址", json=请求体, proxies=proxies, verify=False)
  • 自动读取系统代理:
import requests

url = "目标API地址"
proxies = requests.utils.get_environ_proxies(url)
response = requests.post(url, json=请求体, proxies=proxies, verify=False)

2. 完全匹配Postman的请求头

Postman的请求头可能包含企业服务要求的特殊字段(如User-Agent、Authorization、Cookie或自定义头部),requests生成的代码可能遗漏这些字段。直接复制Postman中所有请求头到代码:

import requests

headers = {
    "User-Agent": "PostmanRuntime/7.32.3",
    "Content-Type": "application/json",
    "Cookie": "xxx=xxx; yyy=yyy",
    # 粘贴Postman中显示的所有其他请求头
}
response = requests.post("目标API地址", headers=headers, json=请求体, verify=False)

3. 对齐请求体格式

确认Postman的请求体类型(form-data/x-www-form-urlencoded/raw JSON),确保requests使用对应参数:

  • 如果是raw JSON:用json=请求体字典
  • 如果是x-www-form-urlencoded:用data=请求体字典
  • 如果是form-data:用files参数(含文件时)或data参数(键值对)

4. 调整超时时间

504是网关超时,可能Python默认超时(15秒)比Postman短。延长超时时间:

response = requests.post("目标API地址", json=请求体, timeout=30)  # 设置30秒超时

5. 处理企业证书

企业环境可能使用自签名证书,除了关闭verify=False,也可以指定证书路径:

response = requests.post("目标API地址", json=请求体, verify="/path/to/企业根证书.pem")

或者设置环境变量REQUESTS_CA_BUNDLE指向证书文件,避免每次代码中指定。

6. 使用会话保持请求状态

Postman可能维持了登录会话(如Cookie),而requests每次请求是独立会话。用requests.Session()保持会话:

import requests

session = requests.Session()
# 先执行登录请求,获取会话Cookie
session.post("登录API地址", data={"username": "xxx", "password": "xxx"})
# 用同一个会话请求目标API
response = session.post("目标API地址", json=请求体)

内容的提问来源于stack exchange,提问作者The Masked CS Intern

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:33:22