【发布时间】:2016-01-29 09:05:51
【问题描述】:
我会从提供 RESTful JSON API 的 ABB G13 网关中检索一些信息。 API 由网关通过 https 端点托管。 基本认证机制用于认证。然而所有的交通 通过 SSL 层。
在 linux 上使用命令:
curl -s -k -X GET -u user:password https://host/meters/a_serial/power
一切顺利!
我正在尝试使用 Requests 2.8.1 和以下代码在 Python 2.7.10 中为 Windows 编写脚本:
import requests
requests.get('https://host/meters/a_serial/power', auth=('user', 'password'))
我有这个错误:
Traceback (most recent call last):
File "C:/Users/mzilio/PycharmProjects/pwrgtw/test.py", line 20, in <module>
requests.get('https://host/meters/a_serial/power', auth=('user', 'password'))
File "C:\Python27\lib\site-packages\requests\api.py", line 69, in get
return request('get', url, params=params, **kwargs)
File "C:\Python27\lib\site-packages\requests\api.py", line 50, in request
response = session.request(method=method, url=url, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 433, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:590)
我已经搜索了解决方案,并尝试使用以下代码进行修复:
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl
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)
s = requests.Session()
s.mount('https://', MyAdapter())
s.get('https://host/meters/a_serial/power')
但这对我不起作用,因为我收到此错误:
Traceback (most recent call last):
File "C:/Users/mzilio/PycharmProjects/pwrgtw/test.py", line 16, in <module>
s.get('https://host/meters/a_serial/power')
File "C:\Python27\lib\site-packages\requests\sessions.py", line 480, in get
return self.request('GET', url, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 433, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:590)
我被这个问题困住了。有人可以帮助我吗?谢谢!
【问题讨论】:
-
参考stackoverflow问题stackoverflow.com/questions/18578439/…
-
引用修复后,出现新错误:
requests.exceptions.SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",) -
你解决过这个问题吗?我对一个不相关的问题也有同样的看法
-
如果互联网连接在脚本中间关闭,这不会随机发生吗?
-
困扰了我一个星期,非常零星。我拥有所有最新的软件和 ssl 堆栈。问题是我在同一个域中有两个冲突的 DNS 条目,一个没有 A 记录。删除了那个,不得不等待 TTL 48 小时。
标签: python ssl https python-requests