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

无法通过Python脚本向FastAPI部署服务发送POST请求

问题排查与解决方案

你的核心问题是开发环境中Python脚本的POST请求被自动重定向为GET,返回200而非预期的201,但Postman直接发送POST正常,生产环境脚本也能运行,结合你的代码和场景,以下是具体排查方向和解决办法:

1. 路径末尾斜杠引发的重定向

FastAPI默认会对不带末尾斜杠的路由发起重定向(比如访问/api/teams会跳转到/api/teams/),而requests库默认会自动跟随重定向,且POST请求在跟随重定向时会被转换为GET请求——这是你遇到返回200而非201的核心原因。

解决办法:

  • 保持脚本中的post_url与Postman中使用的路径完全一致:如果Postman里用的是带末尾斜杠的路径,则脚本里的post_url也要补上斜杠。
  • 或者关闭requests的自动重定向,在请求时添加参数:
    response = requests.request("POST", url=post_url, headers=headers, data=payload, allow_redirects=False)
    
    这样可以看到原始的重定向响应(通常是307/308状态码),直接确认是否是路径斜杠导致的问题。

2. 脚本中的潜在语法问题

你的代码里login_payload变量未定义就直接使用了:

login_response = requests.post(login_url, data=login_payload)

虽然你提到生产环境能运行,但开发环境可能因为这个变量缺失导致登录失败,进而后续请求权限不足引发异常(即便你描述的是重定向问题,也需要确认这个变量是否正确定义)。

3. 开发环境NGINX配置排查(若有部署)

如果开发环境也用了NGINX,检查是否存在强制添加末尾斜杠的重写规则,这类规则也可能导致POST请求被转换为GET。可以临时关闭NGINX,直接访问FastAPI服务的端口测试请求,以此排除NGINX的影响。

4. 验证请求细节一致性

对比Postman的请求详情和脚本生成的请求:

  • 在脚本中打印完整的请求头和请求体,确认Content-Type是否为application/json、token是否正确携带。
  • 开启requests的调试日志查看请求全过程:
    import logging
    logging.basicConfig(level=logging.DEBUG)
    
    这样能看到请求的每一步细节,包括重定向的触发逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:40:15