次のスクリプトを実行すると、Ubuntu 14.04 で python requests ライブラリを使用する際に問題が発生します。
import requests
import json
payload = {'code':'TG-000000000000000000000000', 'client_secret':'X0000000000000000000000000000000', 'grant_type':'authorization_code', 'client_id':'1111111111111111', 'redirect_uri':'http://127.0.0.1:8000/mercadolibre/process_ml_response/'}
headers = {'content-type': 'application/x-www-form-urlencoded'}
requests.post("https://api.mercadolibre.com:443/oauth/token", data=payload, headers=headers)
次のトレースバックを取得します
File "<stdin>", line 1, in <module>
File "/home/theuser/.virtualenvs/tumoto/local/lib/python2.7/site-packages/requests/api.py", line 88, in post
return request('post', url, data=data, **kwargs)
File "/home/theuser/.virtualenvs/tumoto/local/lib/python2.7/site-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/home/theuser/.virtualenvs/tumoto/local/lib/python2.7/site-packages/requests/sessions.py", line 456, in request
resp = self.send(prep, **send_kwargs)
File "/home/theuser/.virtualenvs/tumoto/local/lib/python2.7/site-packages/requests/sessions.py", line 559, in send
r = adapter.send(request, **kwargs)
File "/home/theuser/.virtualenvs/tumoto/local/lib/python2.7/site-packages/requests/adapters.py", line 375, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.mercadolibre.com', port=443): Max retries exceeded with url: /oauth/token (Caused by <class 'socket.error'>: [Errno 104] Connection reset by peer)
Ubuntu 13.10 で同じコードを試すと、問題なく動作します
このエラーは、openssl (1.0.1f) のバージョンに関連しており、python ライブラリを要求しています。
TLS でのリクエストの使用で提案されているように、pyOpenSSL、ndg-httpsclient、および pyasn1 をインストールしようとしましたが、SNI サポートは提供されませんが機能しません。また、スクリプトを実行する前にモンキー パッチを適用しますが、失敗します
注: pyOpenSSL を使用すると、次の新しいエラーが表示されます。
request.exceptions.SSLError: [Errno bad handshake](104, 'ECONNRESET')
提案をありがとう