REST Web サービスの呼び出しに requests.py ライブラリを使用しようとしています。Windows で使用するための簡単なプロトタイプを作成し、すべて正常に動作しましたが、Linux で同じプロトタイプを実行しようとすると、「requests.exceptions.Timeout: Request timed out」というエラーが発生します。なぜこれが起こっているのか誰にも分かりますか?ライブラリを使用して https 以外の URL にアクセスしようとすると、Windows と Linux の両方で正常に動作します。
import requests
url = 'https://path.to.rest/svc/?options'
r = requests.get(url, auth=('uid','passwd'), verify=False)
print(r.content)
get 呼び出しから verify=False パラメーターを省略すると、別の例外、つまり「requests.exceptions.SSLError: SSL モジュールが利用できないため、HTTPS URL に接続できません」が発生することに気付きました。エラーコードが変更される理由はわかりませんが、これが根本的な原因の可能性があるようですが、ssl モジュールへの参照が見つからず、certifi がインストールされていることを確認しました。興味深いことに、Windows で検証パラメーターを省略した場合、別の例外が発生します。
編集:
言及されたすべてのケース/シナリオのトレースバック
上記の完全なコード:
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」パラメータを差し引いて、Windows で実行します。
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