CentOS 环境使用代理下载数据失败-EOF occurred in violation of protocol (_ssl.c:1002)

我的代码如下,主要是通过yfinance包下载历史交易数据:

import yfinance as yf

data = yf.download('000001.SZ', start='2017-01-01', end='2019-01-01')
data

错误现象

Failed to get ticker '000001.SZ' reason: HTTPSConnectionPool(host='query1.finance.yahoo.com', port=443): Max retries exceeded with url: /v1/test/getcrumb (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1002)')))
[*********************100%***********************]  1 of 1 completed

1 Failed download:
['000001.SZ']: YFTzMissingError('$%ticker%: possibly delisted; no timezone found')

定位步骤

1. 错误码 1002 通常表示 SSL/TLS 握手失败。

2. 使用 下面的命令定位原因

openssl s_client -connect query1.finance.yahoo.com:443 -showcerts

看上去一切正常

3. 看一下是不是他说的no timezone found的原因

import os
os.environ['TZ'] 

执行下来发现:

KeyError                                  Traceback (most recent call last)
Cell In[16], line 2
      1 import os
----> 2 os.environ['TZ']

File <frozen os>:679, in __getitem__(self, key)

KeyError: 'TZ'
4.有点问题,设置了变量再试还是有问题

我又直接在服务器上试 wget 命令,感觉也不太行:

[root@localhost clash]# wget https://query1.finance.yahoo.com
--2024-11-25 16:32:01--  https://query1.finance.yahoo.com/
Connecting to 127.0.0.1:7890... connected.
Unable to establish SSL connection.

综上没有使用代理时会报错:

Failed to get ticker '000001.SZ' reason: HTTPSConnectionPool(host='query1.finance.yahoo.com', port=443): Max retries exceeded with url: /v1/test/getcrumb (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f93efef2f10>: Failed to establish a new connection: [Errno 111] Connection refused')))
[*********************100%***********************]  1 of 1 completed

1 Failed download:
['000001.SZ']: YFTzMissingError('$%ticker%: possibly delisted; no timezone found')

代理开启后:

Failed to get ticker '000001.SZ' reason: HTTPSConnectionPool(host='query1.finance.yahoo.com', port=443): Max retries exceeded with url: /v1/test/getcrumb (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1002)')))
[*********************100%***********************]  1 of 1 completed

1 Failed download:
['000001.SZ']: YFTzMissingError('$%ticker%: possibly delisted; no timezone found')

这误导了我,让我觉得代理很有问题,于是我各种尝试,反复调整代理设置,甚至是调整各种防火墙和包,都一无所获!

终于在半夜,当我下定决心不搞定不睡觉的时候这里找到了原因:

Python 遭遇 ProxyError 问题记录_Linux_开心洋葱网

解决办法就是,重新指定urllib3的版本,当前使用的最新版本在有代理的情况下不好用:

pip install urllib3==1.25.11

只能说我对Python太不熟悉了!!!

### 解决 Docker CE RPM 包下载时出现的 Curl SSL 连接错误问题 当在 CentOS 9 上安装 Docker CE 并遇到 `Curl error (28)` 或其他与 SSL 相关的连接错误时,可能的原因包括 OpenSSL 版本过旧、网络超时或 YUM 源配置不当等问题。以下是针对该问题的具体分析和解决方案。 #### 更新 OpenSSL 库 确保系统的 OpenSSL 库是最新的版本可以有效减少因加密协议不兼容而导致的连接失败问题。可以通过以下命令更新 OpenSSL: ```bash yum update -y openssl openssl-devel ``` 此操作会将系统中的 OpenSSL 和其开发库升级到最新稳定版[^1]。 #### 验证 YUM 源配置 如果仍然存在连接错误,则需检查当前使用的 YUM 源是否正确指向官方支持的镜像站点。对于 CentOS 9 用户来说,默认的 Docker 官方仓库可能不再完全适配新操作系统环境下的安全策略。建议替换为国内加速源(如阿里云),具体方法如下: 编辑 `/etc/yum.repos.d/docker-ce.repo` 文件并修改其中的内容为例: ```ini [docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable enabled=1 gpgcheck=1 gpgkey=https://download.docker.com/linux/centos/gpg ``` 完成更改之后再次运行安装指令测试效果如何改善[^5]。 #### 增加超时时间参数 有时即使解决了上述两个方面仍无法避免偶尔发生的短暂性网络波动引发的请求中断现象,在这种情况下可以在原有基础上增加额外选项延长等待周期来规避此类情况发生: ```bash export http_proxy=http://your-proxy-address:port https_proxy=http://your-proxy-address:port no_proxy=localhost,127.0.0.1 yum --timeout=300 install -y docker-ce docker-ce-cli containerd.io ``` 这里我们将默认超时期限设置成了五分钟(`--timeout=300`)以便给予更多缓冲空间给复杂环境下较慢响应速度的服务端节点处理我们的请求数据流传输过程[^2]。 另外值得注意的是某些特殊场景下还涉及到防火墙规则设定亦或是SELinux状态调整等因素也可能间接影响最终成果达成与否故而必要时候也应适当考虑这些潜在干扰变量的影响程度评估后再做相应处置措施决定[^3]. 最后关于利用docker-compose工具实现Nginx服务容器化部署过程中涉及SSL证书配置相关内容可参照专门文档资料进一步学习掌握实践技巧要点[^4].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值