我整天都在这里寻找这个问题的可用答案,但是找不到适用于我的用例的东西。
我正在尝试从检查客户端证书进行身份验证的服务器下载一堆文件。我还有一个列表数组,我想以自动方式下载特定文件。我正在使用python 2.7。我想做的是等待FileOne.zip下载然后循环回来开始下载FileTwo.zip,依此类推。这是代码:
import requests
import shutil
dlList = ["FileOne.zip", "FileTwo.zip", "FileThree.zip"]
cCert = r'C:\Temp\client_cert.pem'
cKey = r'C:\Temp\client_key.pem'
for i in dlList:
url = ("https://my.server.com/files/" + i)
r = requests.get(url, cert=(cCert, cKey), stream=True)
with open(i, "wb") as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
证书工作正常;我得到200回复。
但是在运行时,脚本会在名为FileOne.zip,FileTwo.zip等的目录中创建3个文件,但它们每个只有2K,文件本身都是几百MB。
我想做的是完成一个文件,然后继续下一个文件。一旦它工作,我可以弄清楚如何多线程它。但是现在我只想让文件正确下来......
答案 0 :(得分:0)
好的,这是我为解决它而采取的措施:
而不是
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
我使用以下方式将其分块:
with open(i, "wb") as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
老实说,我不知道这有多高效,但似乎有效。对于我如何能够加强这项工作或转向并发下载的任何建议,仍然会很高兴。