我遇到使用Python请求连接到特定网站的问题并收到此错误:
HTTPSConnectionPool(host ='XXXXXXXXX',port = 443):使用url超出了最大重试次数:/(由SSLError引起(SSLError(“错误握手:SysCallError(-1,'意外的EOF')”),))
我该如何解决这个问题? (设置verify = False没有区别)我怀疑服务器谁在这里有错,因为当我运行他们的测试时它得到了F @ ssllabs的整体评级
我对Python很新,并且要求
我的代码:
import requests
try:
site = requests.get('https://XXXXXXXXXX', verify=True)
print(site)
except requests.exceptions.RequestException as e:
print(e)
pass
答案 0 :(得分:2)
面对同样的错误,pip install ndg-httpsclient
之后我的麻烦就消失了。 yum install python-ndg_httpsclient
或apt-get install python-ndg-httpsclient
(或apt-get install python3-ndg-httpsclient
)可能也有效。
答案 1 :(得分:0)
根本原因可能是 requests 库中的this open bug:“ Session.verify =设置了REQUESTS_CA_BUNDLE环境变量时忽略False”。
我们已经看到类似的问题突然在特定主机上开始。事实证明,env变量是最近在此处设置的,尽管已初始化为False,但它开始导致使用session.verify不是False生成请求。一旦我们删除了REQUESTS_CA_BUNDLE环境变量,错误就会停止。
答案 2 :(得分:0)
设置verify = False
,将会有所帮助:
import requests
try:
site = requests.get('https://XXXXXXXXXX', verify=False)
print(site)
except requests.exceptions.RequestException as e:
print(e)
pass
或尝试使用urllib
:
import requests
import urllib.request
import ssl
# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
try:
site =urllib.request.urlopen(url, context=ctx)
print(site.read().decode())
except requests.exceptions.RequestException as e:
print(e)
pass