2014-09-17 3 views
0

Я пытаюсь сделать простой запрос GET по следующему адресу: linkОшибка SSL на Python GET запрос

Вот основной код питона, который я уже использую для других URL-адресов и работ.

url = 'http://www.bbvafrances.com.ar/francesGo2-Portal/institucional/busqueda.do?m=&page=1' 
r = requests.get(url) 
print r.text 

Дело в том, что именно с этим URL я получаю сообщение об ошибке SSL:

Traceback (most recent call last): 
    File "frances.py", line 134, in <module> 
    r = requests.get(url,verify=False) 
    File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get 
    return request('get', url, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request 
    return session.request(method=method, url=url, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 335, in request 
    resp = self.send(prep, **send_kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 454, in send 
    history = [resp for resp in gen] if allow_redirects else [] 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 144, in resolve_redirects 
    allow_redirects=False, 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 438, in send 
    r = adapter.send(request, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 331, in send 
raise SSLError(e) 
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:1408F119:SSL  routines:SSL3_GET_RECORD:decryption failed or bad record mac 

Любые идеи о том, что происходит с этим конкретным URL, что делает сбой запроса? Я попытался добавить пользовательские заголовки, но все равно не повезло.

Заранее спасибо.

EDIT: Теперь я пытаюсь использовать этот способ SSL, предложенный как ответ.

url = 'https://www.bbvafrances.com.ar/francesGo2-Portal/institucional/busqueda.do?m=&page=1' 
s = requests.Session() 
s.mount(url, SSLAdapter(ssl.PROTOCOL_SSLv3)) 
r = s.get(url) 
print r.text 

Это новый след: (почти идентичный первому)

Traceback (most recent call last): 
    File "frances.py", line 138, in <module> 
    r = s.get(url) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 463, in get 
    return self.request('GET', url, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 451, in request 
    resp = self.send(prep, **send_kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 557, in send 
    r = adapter.send(request, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 420, in send 
    raise SSLError(e, request=request) 
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:1408F119:SSL   routines:SSL3_GET_RECORD:decryption failed or bad record mac 
+1

FWIW, я могу воспроизвести вашу проблему и подтвердить, что этого не происходит на других сайтах HTTPS. – goncalopp

ответ

0

Проблема заключается в том, что сервер объявляет поддержку TLS1.0, но если вы на самом деле пытаются поговорить с ним используя TLS1.0, он сломается. Вместо этого вы должны использовать SSL3.

Вы можете сделать это с помощью SSLAdapter входит в состав пакета requests_toolbelt: http://toolbelt.readthedocs.org/en/latest/user.html#ssladapter.

Затем используйте ssl.PROTOCOL_SSLv3 вместо показанного в документации.

+0

Очень крутой ответ о пакете request_toolbelt, но, к сожалению, я все равно получаю ту же ошибку: request.exceptions.SSLError: [Errno 1] _ssl.c: 504: error: 1408F119: SSL-процедуры: SSL3_GET_RECORD: дешифрование не выполнено или ошибка записи mac – vnportnoy

+0

BTW правильным способом вызова параметра был ssl.PROTOCOL_SSLv3 – vnportnoy

+0

Я исправил тип. Вы уверены, что сделали запрос с сеансом, содержащим новый адаптер? И вы установили адаптер для всех 'https: //'? –

Смежные вопросы