在下载带有请求的大文件时遇到问题?

问题描述

我正在尝试使用API​​下载视频文件,等效的curl命令可以正常工作,对于小视频,下面的python代码可以正常工作>

with requests.get("http://username:password@url/Download/",data=data,stream=True) as r:
    r.raise_for_status()
    with open("deliverables/video_output34.mp4","wb") as f:
        for chunk in r.iter_content(chunk_size=1024):
            f.write(chunk)

对于大型视频失败(对于视频〜34M失败)(等效的curl命令对此视频有效)

Traceback (most recent call last):
  File "/home/nabil/.local/lib/python3.7/site-packages/requests/adapters.py",line 479,in send
    r = low_conn.getresponse(buffering=True)
TypeError: getresponse() got an unexpected keyword argument 'buffering'

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "/home/nabil/.local/lib/python3.7/site-packages/requests/adapters.py",line 482,in send
    r = low_conn.getresponse()
  File "/usr/local/lib/python3.7/http/client.py",line 1321,in getresponse
    response.begin()
  File "/usr/local/lib/python3.7/http/client.py",line 296,in begin
    version,status,reason = self._read_status()
  File "/usr/local/lib/python3.7/http/client.py",line 265,in _read_status
    raise Remotedisconnected("Remote end closed connection without"
http.client.Remotedisconnected: Remote end closed connection without response

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
  File "/home/nabil/.local/lib/python3.7/site-packages/requests/api.py",line 75,in get
    return request('get',url,params=params,**kwargs)
  File "/home/nabil/.local/lib/python3.7/site-packages/requests/api.py",line 60,in request
    return session.request(method=method,url=url,**kwargs)
  File "/home/nabil/.local/lib/python3.7/site-packages/requests/sessions.py",line 533,in request
    resp = self.send(prep,**send_kwargs)
  File "/home/nabil/.local/lib/python3.7/site-packages/requests/sessions.py",line 646,in send
    r = adapter.send(request,**kwargs)
  File "/home/nabil/.local/lib/python3.7/site-packages/requests/adapters.py",line 498,in send
    raise ConnectionError(err,request=request)
requests.exceptions.ConnectionError: Remote end closed connection without response

我检查了类似following链接,但未成功

解决方法

感谢IRC#python上的SilentGhost,他指出this表示我应该升级我的请求,从而解决了这个问题(从2.22.0到2.24.0)。

升级软件包的步骤如下:

pip install requests --upgrade

可以帮助其他人解决此问题的另一个来源是使用pycurl,这是一个很好的起点:https://github.com/rajatkhanduja/PyCurl-Downloader

或/并且您可以在curl命令中使用--libcurl以获取有关如何使用pycurl的良好指示