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

Python requests调用REST接口返回404,curl请求正常求排查

排查requests.get返回404但curl正常的问题

这个情况我碰到好多次了,大概率是请求头的差异导致的,而非服务器刻意拦截(当然也不能完全排除,但先从最常见的点开始排查)。

最可能的原因:请求头不一致

curl和requests默认发送的请求头有不少区别,很多服务器会校验这些头部信息,不符合就返回404。比如:

  • User-Agent差异:curl的默认UA是类似curl/7.68.0(具体版本看你的curl),而requests默认是python-requests/x.x.x,有些服务器会拒绝非浏览器/非curl的UA请求。
  • Accept头差异:curl默认的Accept是*/*,而requests默认的Accept是更复杂的多类型组合,部分服务器只认可简单的Accept值。

解决办法:模拟curl的请求头

先通过curl -v http://xx.xx.xx.xx/server/rest/line/125查看curl发送的完整请求头(找> Host:、> User-Agent:、> Accept:这些行),然后在requests里完全复刻这些头部:

import requests

# 把下面的headers换成curl -v输出里的实际值
headers = {
    'User-Agent': 'curl/7.68.0',
    'Accept': '*/*',
    'Host': 'xx.xx.xx.xx'  # 可选,大部分情况下requests会自动添加,但保险起见可以加上
}

resp = requests.get('http://xx.xx.xx.xx/server/rest/line/125', headers=headers)
print(resp.status_code)
print(resp.text)

其他排查方向

如果上面的方法没用,再检查这几个点:

  • URL一致性:确认requests里的URL和curl里的完全一致,有没有拼写错误、多余的空格或者转义问题(虽然你用了r字符串,但还是仔细核对一遍)。
  • Cookie/会话问题:如果之前用curl访问过该接口并保存了cookie,服务器可能依赖会话cookie,这时候需要用requests的Session()来复用会话,或者手动添加curl里的Cookie头。
  • 代理设置:curl可能使用了系统代理,而requests没有,或者反过来。可以在requests里添加proxies参数,或者关闭代理试试。
  • 重定向问题:curl默认会自动跟随重定向,requests默认也是,但可以检查resp.history看看有没有重定向过程,确认最终请求的URL是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:49:04