Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Requests Requests.exceptions.SSLError:EOF违反了协议_Python_Ssl_Python Requests - Fatal编程技术网

Python Requests Requests.exceptions.SSLError:EOF违反了协议

Python Requests Requests.exceptions.SSLError:EOF违反了协议,python,ssl,python-requests,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 = "s

我正在尝试从使用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\u GET\u SERVER\u证书:证书验证失败。
如果我没有。我不完全理解这意味着什么,我希望你能解释一下。从我的理解来看,请求无法验证服务器的证书。类似地,我的浏览器似乎也无法识别证书,如下所示

总之,我在Windows上运行的脚本与python版本(2.7.x)几乎相同,我得到了以下结果:

我做了一个快速搜索,找到了一些修复,并找到了一个。我按照第一个修复程序将代码更改为:

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(此处不起作用)

是否已检查Windows计算机上的根证书是否为最新版本?不要将文本添加为图像,而是复制/粘贴它。嗅探流量可能会告诉您到底出了什么问题。如果存在协议冲突,则错误可能对应于未加密的数据包结构。因为堆栈跟踪显示“adapter.py”,问题可能出在适配器上,即代码差异而不是操作系统差异上。@ivan_pozdeev我也觉得很奇怪,因为python在不同操作系统上的模块代码不一样吗?如果是这样,那么不使用MyAdapter的初始代码应该可以工作。