'请求'在python中没有完全下载文件

时间:2017-12-14 10:30:37

标签: python python-requests

我正在使用python的请求库来下载大小约为的文件。 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。     InsecurePlatformWarning

     

InsecureRequestWarning:正在进行未经验证的HTTPS请求。强烈建议添加证书验证。请参阅:https://urllib3.readthedocs.org/en/latest/security.html     InsecureRequestWarning)

但我不认为因为这个问题,因为如果我在其他系统上运行此脚本,我会收到这些警告,但脚本运行正常。

2 个答案:

答案 0 :(得分:0)

我使用的是urllib而非请求

import urllib
url = "http://62.138.7.10/downloads/Bh2g2m.Bh2g.06.DR.M0viesC0unter.mp4?st=6MVZyTUL7X22v7ILOtB2XA&e=1502823147"
file_name = 'trial_video.mp4'
response = urllib.urlopen(url)
with open(file_name,'wb') as f:
    f.write(response.read())

希望这会对您有所帮助

答案 1 :(得分:0)

我遇到过类似的请求问题。 Requests 非常适合处理花哨的 JSON api POST 请求等,但对于普通文件下载,pycurl 是一个更好的工具。对 libcurl 的复杂依赖意味着您不应该尝试使用 pip 安装 pycurl;相反,您需要从您的发行版下载一份副本,或者使用他们网站上预先构建的 win32 模块之一。

值得一提的是,当我使用文件下载请求时,我还设置了日志记录,但出现了一些“管道损坏”错误。也许由于性能原因或其他原因,请求会提前断开连接?当我知道有一个可靠的替代解决方案时,我没有耐心去弄清楚。