2017-03-15 16 views
0

AWSのNGINX Webサーバーの後ろにFlaskの安らかなAPIを実行しています。私は私のPiからPythonモジュールでそれを打っています。私は、APIへの呼び出しを行うためにHTTPを使用していたときPythonがHTTPSで呼び出しに失敗するようにします

すべてがうまく働きました。しかし、私はちょうどHTTPSが可能なので、私のAPIをロックダウンした。私は私のpythonモジュールで使用されるUIRLを変更しましたが、今は失敗します。コードは非常に単純です...ここに抽出物があります:

jsonpkg = {'subscriberID': self.api_login, 'token': self.api_token, 
       'content': speech_content} 
headers = {'Content-Type': 'application/json'} 
r = requests.post(self.api_apiurl, data=json.dumps(jsonpkg), headers=headers) 

値はクラスinitセクションによって正しく設定されています。そして、リクエストモジュールを一番上にインポートしています。エラーメッセージはPython 2.7を使用していることを示します。しかし、私はAPIを監視するとき、私はそれがサーバーに当たっていないことがわかります。私はapiとその正常にブラウザを指すことができます。

は、私は、HTTPSをサポートしていないのpython 2.7で要求モジュールを理解することですか?

は私がhttpsのために送信する必要がある追加のパラメータはありますか?

答えて

0

Aha!リクエストモジュールのドキュメントをもう少し掘り下げて私は答えを見つけました。以下を使用する場合

r = requests.post(self.api_apiurl, data=json.dumps(jsonpkg), headers=headers, verify=False) 

それが動作します。したがって問題は証明書を確認することです。私はブラウザがこれがなければどうして得られるのか分かりませんが、おそらくそれは自動的に余分なものを行います。だから、私は証明書を検証しないか、検証可能なローカルコピー(?)を持っている必要があります。


最終更新日:

私は最終的にチェーン証明書を使用して、私のサイト証明書を連結(と理由を理解)する方法を働きました。このサイトhereは大きな助けとなりました。また、それらが連結されると、おそらく2番目のエラーが発生します。これは、Googleの場合、最初の証明書の後、2番目の証明書の後に復帰する必要があるために発生します(結果の連結ファイルをメモ帳で編集します)。私はその後、 "verify = True"を使用して投稿を返すことができました。これにより、検証なしの警告がなくなりました。

+0

Pythonは古く、サイトまたはサイトで必要になる可能性があるSNI(2.7.9で実装されましたが)正しくセットアップと(ブラウザが頻繁にこの問題を回避します)チェーンの証明書が欠落していないではサポートされていませんどちらか。 [SSLLabs](https://www.ssllabs.com/ssltest/analyze.html)でサイトをチェックし、チェーンの問題またはSNIの要件を探します。単に証明書の検証を無効にすることは良い考えではありません。 –

関連する問題