requests.get 大文件,下载不完整但找不到错误指示

Rya*_*ing 7 python python-3.x python-requests

我正在尝试使用与此答案相同的技术使用请求来下载大文件(即 android cts zip 文件) 。间歇性地无法下载整个文件,但在我尝试解压缩文件之前,我找不到任何表明出现问题的迹象

CTS_URL = 'http://dl.google.com/dl/android/cts/android-cts-8.0_r14-linux_x86-x86.zip'
CTS_ZIP = 'android-cts-8.0_r14-linux_x86-x86.zip'

import requests

req = requests.get(CTS_URL, stream=True)
with open(CTS_ZIP, 'wb') as cts_zip_file:
  for chunk in req.iter_content(chunk_size=4096):
    cts_zip_file.write(chunk)
Run Code Online (Sandbox Code Playgroud)

稍后当我尝试解压缩时出现BadZipFile("File is not a zip file")错误,因为文件尚未完全下载

import zipfile
zipfile.ZipFile(CTS_ZIP)  # fails
Run Code Online (Sandbox Code Playgroud)

但是,我无法从请求对象中得到任何表明出现问题的指示。req.status伊斯兰200国。req.okTrue

req知道出了什么问题吗?目前,我在交互式提示中拥有这些请求对象之一,因此我可以进一步检查它。

小智 0

您分享的代码对我有用。但是,您可能会考虑以下事项:

  1. 就像sraw提到的那样,检查Content-length值。
  2. 检查您下载的文件。如果文件大小正确,您可以尝试在 shell 中手动提取文件(只是想确认一下)。
  3. 您可以尝试使用 urllib (示例
  4. 也可能是服务器问题——以防万一。您可以尝试下载不同的文件。