Я пытаюсь использовать библиотеку request.py для вызовов веб-службы отдыха. Я написал быстрый прототип для своего использования под Windows, и все работало нормально, но когда я попытался запустить тот же прототип под Linux, я получил ошибку «requests.exceptions.Timeout: Request timed out». Кто-нибудь знает, почему это может происходить? Если я попытаюсь использовать библиотеку для доступа к URL-адресу, отличному от https, он отлично работает как под Windows, так и под Linux.
import requests
url = 'https://path.to.rest/svc/?options'
r = requests.get(url, auth=('uid','passwd'), verify=False)
print(r.content)
Я заметил, что если я оставлю параметр verify=False в вызове get, я получу другое исключение, а именно «requests.exceptions.SSLError: не удается подключиться к URL-адресу HTTPS, поскольку модуль SSL недоступен». Это кажется возможной основной причиной, хотя я не знаю, почему они изменили код ошибки, но я не могу найти ссылку на модуль ssl, и я проверил, что certifi был установлен. Интересно, что если я не указываю параметр проверки в Windows, я получаю другое исключение: «requests.exceptions.SSLError: [Errno 1] _ssl.c:503: ошибка: 14090086: подпрограммы SSL: SSL3_GET_SERVER_CERTIFICATE: ошибка проверки сертификата»
РЕДАКТИРОВАТЬ:
Трассировки для всех упомянутых случаев/сценариев
Полный код, как показано выше:
Traceback(most recent call last):
File "testRequests.py", line 15, in <module>
r = requests.get(url, auth=('uid','passwd'), verify=False)
File "build/bdist.linux-x86_64/egg/requests/api.py", line 52, in get
File "build/bdist.linux-x86_64/egg/requests/api.py", line 40, in request
File "build/bdist.linux-x86_64/egg/requests/sessions.py", line 208, in request
File "build/bdist.linux-x86_64/egg/requests/models.py", line 586, in send
requests.exceptions.Timeout: Request timed out
Код, как показано выше, минус параметр "verify=False":
Traceback(most recent call last):
File "testRequests.py", line 15, in <module>
r = requests.get(url, auth=('uid','passwd'))
File "build/bdist.linux-x86_64/egg/requests/api.py", line 52, in get
File "build/bdist.linux-x86_64/egg/requests/api.py", line 40, in request
File "build/bdist.linux-x86_64/egg/requests/sessions.py", line 208, in request
File "build/bdist.linux-x86_64/egg/requests/models.py", line 584, in send
requests.exceptions.SSLError: Can't connect to HTTPS URL because the SSL module is not available
Код, как показано выше, минус параметр "verify=False" и запуск под окнами:
Traceback(most recent call last):
File "testRequests.py", line 59, in <module>
r = requests.get(url, auth=('uid','passwd'))
File "c:\Python27\lib\site-packages\requests\api.py", line 52, in get
return request('get', url, **kwargs)
File "c:\Python27\lib\site-packages\requests\api.py", line 40, in request
return s.request(method=method, url=url, **kwargs)
File "c:\Python27\lib\site-packages\requests\sessions.py", line 208, in request
r.send(prefetch=prefetch)
File "c:\Python27\lib\site-packages\requests\models.py", line 584, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
import ssl; from ssl import socket
в той же среде Python, где вы получаете ошибкуrequests.exceptions.Timeout: Request timed out
? - person Piotr Dobrogost   schedule 17.04.2012import ssl; ssl.get_server_certificate(('google.com',443))
? и посмотреть, что происходит. - person lukecampbell   schedule 18.04.2012yum
илиapt-get
). Удалите его, установите openssl и установите (скомпилируйте, если можете). - person lukecampbell   schedule 18.04.2012sys.version
? - person Piotr Dobrogost   schedule 18.04.2012