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

Python requests发起HEAD请求返回错误Content-Type与404、curl正常如何解决

问题原因分析
  • 核心原因是目标站点服务器未对HEAD请求做兼容处理:多数CDN或后端服务仅实现了常用的GET、POST请求逻辑,收到HEAD请求时会直接返回404错误或错误的响应头,你用curl默认发送的是GET请求,因此可以拿到正确的Content-Type。
  • 次要可能原因:requests默认的User-Agent标识为python-requests/版本号,部分站点会拦截该UA,而curl默认会携带自身的UA标识,不会被拦截。
解决方法

推荐使用GET请求+流式传输的方案,既可以避免HEAD请求不兼容的问题,又不需要下载完整的CSV文件,只获取响应头即可,性能和HEAD请求一致:

import requests
url = "https://stats.oecd.org/sdmx-json/data/DP_LIVE/.GDP.../OECD?contentType=csv&detail=code&separator=comma&csv-lang=en"

# 设置stream=True时,requests只会先拉取响应头,不会立即下载响应体
r = requests.get(url, stream=True)
# 先判断请求是否成功
if r.status_code == 200:
    header_dict = r.headers
    print(header_dict.get("Content-Type"))
    # 用完主动关闭连接,避免占用资源
    r.close()

如果仍要尝试使用HEAD请求,可以手动把UA修改为curl的UA,部分情况下可以解决UA拦截的问题:

import requests
url = "https://stats.oecd.org/sdmx-json/data/DP_LIVE/.GDP.../OECD?contentType=csv&detail=code&separator=comma&csv-lang=en"

headers = {
    "User-Agent": "curl/7.68.0" # 和你本地curl的版本保持一致即可
}
r = requests.head(url, headers=headers)
print(r.status_code)
print(r.headers.get("Content-Type"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:24:03