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

使用Python requests下载图片异常:Content-Length不符无图片内容

解决requests下载图片时Content-Length异常的问题

我之前也碰到过一模一样的情况——浏览器和REST客户端能正常拿到图片,但用requests请求就只返回十几字节的内容,大概率是这些细节没处理到位,给你几个排查和解决的方向:

  • 先看响应的实际内容,别光盯着Content-Length
    很多时候服务器返回的不是图片,而是一段简短的错误提示(比如{"err":"denied"}这类JSON,刚好15字节左右)。先打印响应文本看看:

    import requests
    
    img_url = "你的图片URL"
    headers = {
        # 这里填入你从浏览器复制的完整请求头
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
        "Accept": "image/webp,image/apng,image/*,*/*;q=0.8",
        "Referer": "图片所在页面的URL"  # 这个字段很多服务器会严格校验
    }
    
    resp = requests.get(img_url, headers=headers)
    print("状态码:", resp.status_code)
    print("响应文本:", resp.text)  # 看看是不是权限或反爬类错误提示
    

    如果是权限类错误,那就要针对性处理登录或验证逻辑。

  • 确保会话保持和Cookies正确
    浏览器会自动保存会话Cookies,但requests默认是单次请求,如果你访问的图片需要登录权限,得用Session对象来维持会话:

    session = requests.Session()
    # 先完成登录流程(替换成实际的登录接口和参数)
    login_data = {"username": "你的账号", "password": "你的密码"}
    session.post("登录接口URL", data=login_data, headers=headers)
    # 再用同一个session请求图片
    img_resp = session.get(img_url, headers=headers)
    with open("downloaded_img.jpg", "wb") as f:
        f.write(img_resp.content)
    
  • 检查重定向是否被正确处理
    有些服务器会返回3xx重定向,虽然requests默认开启了重定向,但偶尔会遇到相对路径重定向或者特殊的重定向逻辑。可以查看响应的history属性确认:

    print("重定向历史:", resp.history)
    

    如果有未正确跟进的重定向,也可以显式设置allow_redirects=True(默认就是True,但可以再确认),或者手动提取重定向后的URL重新请求。

  • 补全所有必要的请求头
    除了User-Agent,服务器可能还会检查Accept-Encoding、Accept-Language、Origin这些字段。建议用浏览器开发者工具(F12)复制完整的请求头,完全照搬过来,不要遗漏任何字段。

  • 临时测试是否需要禁用SSL验证(仅用于排查)
    如果服务器的SSL证书有问题,requests会默认拒绝,但浏览器可能会忽略。可以临时设置verify=False测试:

    resp = requests.get(img_url, headers=headers, verify=False)
    

    注意:这只是排查手段,生产环境不要这么做,建议配置正确的CA证书。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:24:17