使用经过身份验证的资源

时间:2016-09-09 20:08:31

标签: python ssl python-multithreading downloading

我整天都在这里寻找这个问题的可用答案,但是找不到适用于我的用例的东西。

我正在尝试从检查客户端证书进行身份验证的服务器下载一堆文件。我还有一个列表数组,我想以自动方式下载特定文件。我正在使用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。

我想做的是完成一个文件,然后继续下一个文件。一旦它工作,我可以弄清楚如何多线程它。但是现在我只想让文件正确下来......

1 个答案:

答案 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)

老实说,我不知道这有多高效,但似乎有效。对于我如何能够加强这项工作或转向并发下载的任何建议,仍然会很高兴。