2015-11-18 10 views
12

Когда я исполняю строку ниже,Рукопожатие Сбой в питона (_ssl.c: 590)

req = urllib2.Request(requestwithtoken) 
self.response = urllib2.urlopen(req,self.request).read() 

Я получаю следующее исключение:

SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590) 

Дело в том, я могу получить токен, проверив службу, используя curl. В процессе получения маркера все сертификаты были проверены. В свою очередь, используя сгенерированный токен, я не могу подключиться к сервису. Я получаю вышеуказанную ошибку при попытке. Что может быть причиной этого?

ответ

11

У меня была такая же проблема. Вероятно, потому, что ваш удаленный сервер запрашивает шифр, который не поддерживается urllib2. Я думаю, что возможны два решения:

  1. Enable your specific cipher in urllib. Я думаю, вы также можете включить all ciphers supported (см. Самую нижнюю часть страницы), но скорее проверьте, какой из них вы используете с curl, как показано в приведенной выше ссылке.

  2. Установить requests с дополнительными пакетами безопасности, используя: pip install requests[security]. Это обсуждается в этом requests issue on github.

Я сделал второй вариант, и это сработало для меня.

-2

У меня также была та же проблема. Проверьте, какая версия требует, которую вы используете.

import requests 
print requests.__version__ 

Если версия 2.18.4, вы должны попробовать понизить до версии 2.11.1. Я сделал это, и это устранило мою проблему. Чтобы сделать это, выполните следующие команды в терминале

pip uninstall requests 
pip install requests==2.11.1 

Надеется, что это помогает.