我整天都在这里寻找这个问题的可用答案,但没有找到适合我的用例的答案。
我正在尝试从检查客户端证书以进行身份验证的服务器下载一堆文件。我还有一个列表数组,其中包含要以自动方式下载的特定文件。我正在使用 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。
我想做的是完成一个文件,然后继续下一个。一旦它起作用,我就可以弄清楚如何对其进行多线程处理。但现在我只想正确下载文件...
最佳答案
好的,这是我为修复它所做的:
代替
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)
老实说,我不知道这有多有效,但它似乎有效。仍然很乐意就如何收紧它或转移到并发下载提出任何建议。
关于python - 在经过证书身份验证的资源上使用 python 请求下载列表文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39419035/