【问题标题】:Save a large file using the Python requests library [duplicate]使用 Python 请求库保存大文件 [重复]
【发布时间】:2026-02-16 10:10:02
【问题描述】:

可能重复:
How to download image using requests

我知道获取 url 就像 requests.get 一样简单,我可以获取原始响应正文并将其保存到文件中,但是对于大文件,有没有办法直接流式传输到文件?就像我正在下载电影之类的?

【问题讨论】:

  • 我不认为这是完全重复的。这是一个更通用的问题,由于措辞的原因,人们比其他问题更有可能搜索此问题,答案的赞成票就证明了这一点。
  • 即使关闭,作为重复的标志也会引导读者找到答案。
  • 也许可以,但方法是一样的。

标签: python file http download request


【解决方案1】:

奇怪的是,请求对此没有任何简单的东西。您必须遍历响应并将这些块写入文件:

response = requests.get('http://www.example.com/image.jpg', stream=True)

# Throw an error for bad status codes
response.raise_for_status()

with open('output.jpg', 'wb') as handle:
    for block in response.iter_content(1024):
        handle.write(block)

我通常只使用urllib.urlretrieve()。它可以工作,但如果您需要使用会话或某种身份验证,上述代码也可以工作。

【讨论】:

  • 这是一个非常好的观点。有人应该向 Kenneth Reitz 指出这一点——或者向项目提交拉取请求?
  • @jdotjdot: 类似requests.get(...).save('file.txt')?
  • 请注意——在最新版本的请求中,预取参数已更改为流。所以这里会使用 stream=True。
  • 这段代码不是检查状态码,而是简单地将服务器的响应消息作为字符串写入文件,以防出现问题。我建议在get 行之后插入一个if not request.ok: return False
  • @zsero 如果要在响应码不在 200-206 范围内时引发异常,也可以使用 response.raise_for_status()