Python:SSLError,糟糕的握手,意外的EOF

时间:2017-11-06 17:49:05

标签: python python-requests

我遇到使用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

3 个答案:

答案 0 :(得分:2)

面对同样的错误,pip install ndg-httpsclient之后我的麻烦就消失了。 yum install python-ndg_httpsclientapt-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