我正在使用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)
但我不认为因为这个问题,因为如果我在其他系统上运行此脚本,我会收到这些警告,但脚本运行正常。
答案 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 模块之一。
值得一提的是,当我使用文件下载请求时,我还设置了日志记录,但出现了一些“管道损坏”错误。也许由于性能原因或其他原因,请求会提前断开连接?当我知道有一个可靠的替代解决方案时,我没有耐心去弄清楚。