请求requests.exceptions.SSLError:EOF违反协议

时间:2016-04-04 10:45:47

标签: python ssl python-requests

我试图从使用HttpBasicAuth的网站下载文件。在Ubuntu机器上一切正常,但是当我尝试在Windows机器上运行脚本时却没有。我在使用请求从该网站下载文件时遇到问题。以下是与我的问题相关的代码:

适用于Ubuntu的初始代码:

url = 'https://abc.example.com'
s = requests.Session()
s.verify = False
s.auth = (creds['user'], creds['passwd'])
filename = "somefile.txt"
download_url = url + "/" + filename
resp = s.get(download_url)  # fails on this line when run in Windows

我做了verify=False因为我没有SSL3_GET_SERVER_CERTIFICATE:certificate verify failed.。我不完全理解这意味着什么,我会很感激解释。根据我的理解,请求无法验证服务器的证书。同样,我的浏览器似乎也无法识别证书,如下所示。

browser cannot recognize

无论如何,所以我在Windows上运行了几乎相同的python版本(2.7.x)的脚本,我得到了这个:

exception shown

我进行了快速搜索并找到了一些修正here并找到了github issue here。我按照第一个修复程序将代码更改为:

url = 'https://abc.example.com'
s = requests.Session()
s.verify = False
s.auth = (creds['user'], creds['passwd'])
s.mount('https://', MyAdapter())
# .. omitted code similar to the one above ..
resp = s.get(download_url)

我添加了答案中指定的类

class MyAdapter(HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(num_pools=connections,
                                       maxsize=maxsize,
                                       block=block,
                                       ssl_version=ssl.PROTOCOL_TLSv1)

它仍然显示相同的错误。

从github问题来看,他们正在检查OpenSSL版本,所以我检查了Windows机器,如果我没记错,它是1.0.2a。我检查了初始版本工作的Ubuntu机器,它是1.0.1f

编辑:

Ubuntu中的Python版本:2.7.6(在这里工作)

Windows中的Python版本:2.7.10(此处不起作用)

0 个答案:

没有答案