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

Python requests.post调用始终返回400 Bad Request但Postman可正常请求

问题排查与解决方案

1. 基础参数校验

  • 打印拼接后的url变量,确认和Postman中请求的目标URL完全一致,避免base_url末尾多斜杠导致拼接出//screenshot这类错误路径。
  • 确认Postman中上传文件的字段名、普通参数名是否和代码完全一致,注意大小写敏感,比如如果服务端要求文件字段是image而非imagefile,会直接返回400。
  • 检查date参数的格式是否符合服务端要求,比如是时间戳、yyyy-mm-dd还是其他格式,将Postman中的参数值和代码中date变量的输出做对比校验,确认完全一致。

2. 修复文件读取逻辑

当前代码未显式关闭打开的文件句柄,在Mac系统下可能出现文件占用导致读取内容异常,修改为上下文管理器方式读取文件,同时校验文件格式:

token = 'Bearer {}'.format(auth_token)
url = "{}/screenshot".format(base_url)
payload = {'date': date}
headers = {'Authorization': token}

try:
    # 上下文管理器自动管理文件句柄,避免文件读取异常
    with open(image_path, 'rb') as f:
        # 若Mac截图为默认png格式,将Content-Type修改为image/png
        files = {'imagefile': ('imagefile', f, 'image/jpeg')}
        log.debug("file : {0}".format(files))
        response = requests.post(
            url, headers=headers, data=payload, files=files, timeout=30
        )
except Exception as e:
    log.error("Request ERROR: {0}".format(e))

3. 补全请求头字段

Postman会默认携带User-Agent、Accept等头字段,部分服务端会校验这些头的存在,可将Postman中正常请求的所有头字段复制到代码的headers配置中,示例:

headers = {
    'Authorization': token,
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
    'Accept': '*/*'
}

4. 打印请求日志定位差异

开启urllib3的调试日志,输出完整的请求头、请求体内容,和Postman的请求报文做对比,快速定位差异点:

import requests.packages.urllib3 as urllib3
urllib3.add_stderr_logger()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:48:00