[Python]开着代理出现SSLError

前言

有个论坛一直在签到做任务,之前苦于对业务并不熟悉,一直没有去做签到脚本。这几天发现每日任务的领取和完成都是通过访问一个url来完成,不存在发送什么信息。虽然对爬虫只是一知半解,但是还是知道用request,对url get就行了,当然headers要加上cookis,user-agent。

问题

以上流程事实证明没有问题,但在过程上一直出现
Caused by SSLError(SSLError("bad handshake: SysCallError(-1, 'Unexpected EOF')",),)

完整错误信息没有保存下来,但这篇文章的评论说的很清楚

其实这个错误不完全是开了代理的原因,但确实关了代理就可以了。urllib 新版本的原因。如果出现这个问题,直接退回 urllib 版本:pip3 install urllib3==1.23。

由于现在已经解决这个问题,在尝试复现错误的过程中出现另一种错误
(Caused by ProxyError('Cannot connect to proxy.', OSError(0, 'Error')))
我认为两个问题都是本质相同的,且可以通过以上方法解决

由于我上的论坛需要一些辅助;又很恰巧的,虽然以前也有挂着辅助爬虫,但这次使用的虚拟环境和以前不一样,从而安装了最新的request库,同时或许安装了最新的urllib3

总结

关闭代理和urllib3降级选一个

SSLError是一个HTTPS连接错误,通常会在进行HTTPS请求时出现。它可能是由于以下原因之一: 1. 证书验证错误:当你尝试连接到一个HTTPS站点时,你的请求会被发送到该站点的服务器,并验证站点证书的有效性。如果证书无效(例如已过期、与站点的域名不匹配或被吊销),那么你的请求将被拒绝,并且你将会遇到SSLError错误。 2. 代理错误:如果你使用代理服务器来连接HTTPS站点,那么代理服务器可能会被配置不正确,或者没有正确的证书,导致连接失败。 3. TLS版本不兼容:如果你的客户端和服务器之间的TLS版本不兼容,那么你也可能会遇到SSLError错误。 要解决SSLError错误,可以尝试以下方法: 1. 确保你的证书有效:检查你的证书是否过期、与站点的域名匹配,或者是否被吊销。如果证书无效,那么你需要联系站点管理员,并请求更新证书。 2. 检查代理设置:如果你使用代理服务器连接HTTPS站点,那么你需要确保代理服务器的配置正确,并且有适当的证书。 3. 更新TLS版本:如果你的客户端和服务器之间的TLS版本不兼容,那么你需要升级你的TLS版本。在Python中,你可以使用requests库来设置TLS版本,例如: ```python import requests from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.ssl_ import DEFAULT_CIPHERS from requests.packages.urllib3.util import ssl_ s = requests.Session() s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s = requests.Session() s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.verify = True s.auth = ('username', 'password') s.headers.update({'User-Agent': 'Mozilla/5.0'}) s.headers.update({'Connection': 'close'}) s.headers.update({'Content-Type': 'application/json'}) s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.verify = True s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.verify = True s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.verify = True s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.verify = True s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.verify = True s.verify = True s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.verify = True s.verify = True s.mount('https://', HTTPAdapter(max_retries=3)) s.keep_alive = False s.verify = True s.verify = True ``` 以上是一段使用requests库设置TLS版本的示例代码,你可以根据自己的需求进行修改和使用。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值