python - 在经过证书身份验证的资源上使用 python 请求下载列表文件

标签 python ssl python-multithreading download

我整天都在这里寻找这个问题的可用答案,但没有找到适合我的用例的答案。

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

相关文章:

python - 如何在 Python 中使用 'requests' 成功登录 (GET/POST) - 409 冲突

python - 无法使用plt.imshow显示图片

连接到 Qt 信号的 Python lambda 函数在不同线程中创建时不会运行

python - 如何使用 Python 调用电话?

javascript - 在 Chrome 扩展程序中获取当前页面 SSL 证书的指纹

ssl - HTTPS 站点上的 PhantomJS "SSL handshake failed",即使使用所有标志

带有 Ssl 连接超时 10060 的 Delphi XE7 Indy Rest Api 帖子

python - 如何从 pandas 的列中过滤第一次出现的普通话字符并将其放入另一列中

python - 异步 : Wait for event from other thread

python - 每 N 秒在后台线程中重复执行一个函数