requests.exceptions.ProxyError: HTTPSConnectionPool相关问题分析

note: 在python中使用requests库从网上下载资源时出现如下图中的问题,资源无法成功下载。
在这里插入图片描述

这个问题遇到的概率还挺大的,因为本身能否work就受网络因素的影响。

我大致总结了几个可能出现的原因:

  1. 网络原因,文件资源比较大,重试的次数比较多,超出阈值,导致不能报错不能成功下载,这个时候可以考虑设置一下修改参数,增大重试次数,超时时间等参数。还不行的话,就直接从网上下载吧 。不是自己代码的问题,不要为难自己 😆😆
  2. 使用了科学上网,关一下代理。 ps: 这个问题在使用pip命令下载包时,可能也会出现,前提就是你已经设置了下载的时候选择从国内的镜像源上下载,如清华镜像,这个时候再使用pip下载包可能下载不成功。至于本文这里为什么要关代理,我不是很清楚,我这里的情况时关闭代理能够work
  3. 建立的连接数过多,程序请求次数过快。

ps:关了代理发现不报错了,但是下了一下空文件,难搞><,100多kb的文件也没能成功下下来,换了一个requests库下载大文件的代码,终于成功。。

这里贴一下参考的博客: requests下载大文件

原来的下载代码:

SPEECH_URL = "https://pytorch-tutorial-assets.s3.amazonaws.com/VOiCES_devkit/source-16k/train/sp0307/Lab41-SRI-VOiCES-src-sp0307-ch127535-sg0042.wav"  # noqa: E501
SPEECH_FILE = "_assets/speech.wav"

if not os.path.exists(SPEECH_FILE):
    os.makedirs("_assets", exist_ok=True)
    with open(SPEECH_FILE, "wb") as file:
        file.write(requests.get(SPEECH_URL).content)

找了一份新的下载代码:

import sys
import requests
import os


class Downloader(object):
    def __init__(self, url, file_path):
        self.url = url
        self.file_path = file_path

    def start(self):
        res_length = requests.get(self.url, stream=True)
        total_size = int(res_length.headers['Content-Length'])
        print(res_length.headers)
        print(res_length)
        if os.path.exists(self.file_path):
            temp_size = os.path.getsize(self.file_path)
            print("当前:%d 字节, 总:%d 字节, 已下载:%2.2f%% " % (temp_size, total_size, 100 * temp_size / total_size))
        else:
            temp_size = 0
            print("总:%d 字节,开始下载..." % (total_size,))

        headers = {'Range': 'bytes=%d-' % temp_size,
                   "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0"}
        res_left = requests.get(self.url, stream=True, headers=headers)

        with open(self.file_path, "ab") as f:
            for chunk in res_left.iter_content(chunk_size=1024):
                temp_size += len(chunk)
                f.write(chunk)
                f.flush()

                done = int(50 * temp_size / total_size)
                sys.stdout.write("\r[%s%s] %d%%" % ('█' * done, ' ' * (50 - done), 100 * temp_size / total_size))
                sys.stdout.flush()


if __name__ == '__main__':
    SPEECH_URL = "https://pytorch-tutorial-assets.s3.amazonaws.com/VOiCES_devkit/source-16k/train/sp0307/Lab41-SRI-VOiCES-src-sp0307-ch127535-sg0042.wav"  # noqa: E501
    SPEECH_FILE = "_assets/speech.wav"
    if not os.path.exists(SPEECH_FILE):
        os.makedirs("_assets", exist_ok=True)
    downloader = Downloader(SPEECH_URL, SPEECH_FILE)
    downloader.start()
    

注: 写这篇文章主要记录一下科学上网、代理的问题,不止一次出现过。要把代理关了才能work,背后的原因不尽相同吧。还有requests库下载文件这东西,这次下了一个空文件,吸取了教训。大文件分块,断点续传要考虑的东西多的去了。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值