Python demandes.des exceptions.SSLError: EOF eu lieu en violation du protocole

Je voudrais extraire des informations à partir d'un ABB G13 passerelle qui offrent une RESTful API JSON. L'API est hébergé par la passerelle via https point de terminaison.
De base, le mécanisme d'authentification est utilisé pour l'authentification. Cependant, tout le trafic
passe par SSL couches.

Sur linux avec la commande:

curl -s -k -X GET -u user:password https://host/meters/a_serial/power

Tout va bien!

Je suis en train d'écrire un script pour windows en Python 2.7.10 avec les Demandes 2.8.1 et avec ce code:

import requests
requests.get('https://host/meters/a_serial/power', auth=('user', 'password'))

J'ai cette erreur:

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)

J'ai cherché une solution et j'ai essayé de réparer avec ce 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')

Mais il ne fonctionne pas pour moi parce que je reçois cette erreur:

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)

Je suis bloqué sur ce problème. Quelqu'un pourrait-il m'aider? Merci!

Reportez-vous à la stackoverflow question stackoverflow.com/questions/18578439/...
Avec le correctif référencé, un nouveau message d'erreur: requests.exceptions.SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",)
Avez-vous jamais résoudre ce problème? Je suis arriver la même chose avec une autre question

OriginalL'auteur mzilio | 2015-10-29