【发布时间】:2018-05-28 09:52:46
【问题描述】:
我正在使用 Python 的 requests 库来下载一个大小约为 1 的文件。 40mb。但是使用我的代码,我只能获得 14mb 大小的文件。它没有显示任何错误(尽管在下载文件之前很少出现警告)。
这是我的代码:
import requests
file_url = "https://file_url.tar"
user='username'
passw='password'
r = requests.get(file_url,auth=(user,passw),verify=False, stream = True)
with open("c.tar","wb") as code:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
code.write(chunk)
我也尝试过不使用“stream=True”。但这也行不通。
当我将此 URL 放入浏览器时,我得到了 40 mb 的完整文件。
我在其他机器上尝试了这个脚本,它在那里运行良好(我也在这里收到了这些警告)。
这些是我收到的警告:
SNIMissingWarning:已发出 HTTPS 请求,但 TLS 的 SNI(主题名称指示)扩展在此平台上不可用。这可能会导致服务器提供不正确的 TLS 证书,从而导致验证失败。有关详细信息,请参阅https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning。 SNIMissingWarning
InsecurePlatformWarning:真正的 SSLContext 对象不可用。这会阻止 urllib3 正确配置 SSL,并可能导致某些 SSL 连接失败。有关详细信息,请参阅https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning。 不安全平台警告
InsecureRequestWarning:正在发出未经验证的 HTTPS 请求。强烈建议添加证书验证。见:https://urllib3.readthedocs.org/en/latest/security.html 不安全请求警告)
但我认为这没有问题,因为如果我在其他系统上运行此脚本,我会收到这些警告,但脚本运行正常。
【问题讨论】:
-
我也有类似的代码,不过我用的是chunk_size=8,你可以试试看,不知道有没有用。
-
什么警告?始终将完整的错误消息(Traceback)和警告放在有问题的地方(作为文本,而不是屏幕截图)。
-
如果网络出现问题,则可能会断开连接。如果您在下载之前知道文件大小,那么您就会知道是否必须重复下载。您应该在标题
content-size中有文件大小