I would retrieve some information from an ABB G13 gateway that offer a RESTful JSON API. API is hosted by the gateway via https endpoint.
Basic authentication mechanism is used for authentication. However all traffic
goes through SSL layers.
On linux with command:
curl -s -k -X GET -u user:password https://host/meters/a_serial/power
All goes well!
I'm trying to write a script for windows in Python 2.7.10 with Requests 2.8.1 and with this code:
import requests
requests.get('https://host/meters/a_serial/power', auth=('user', 'password'))
I have this error:
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:Python27libsite-packages
equestsapi.py", line 69, in get
return request('get', url, params=params, **kwargs)
File "C:Python27libsite-packages
equestsapi.py", line 50, in request
response = session.request(method=method, url=url, **kwargs)
File "C:Python27libsite-packages
equestssessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "C:Python27libsite-packages
equestssessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "C:Python27libsite-packages
equestsadapters.py", line 433, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:590)
I've searched for a solution and I've tried to fix with this code:
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')
But it doesn't work for me cause I get this error:
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:Python27libsite-packages
equestssessions.py", line 480, in get
return self.request('GET', url, **kwargs)
File "C:Python27libsite-packages
equestssessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "C:Python27libsite-packages
equestssessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "C:Python27libsite-packages
equestsadapters.py", line 433, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:590)
I'm stuck on this problem. Could someone help me? Thanks!
See Question&Answers more detail:
os