Djangoアプリと通信するためにリクエストを使用していますが、
しようとすると
requests.get('https://mysite.com', verify=True)
エラーが表示されます:
ホスト名「mysite.com」は「* .myhost.com」、「myhost.com」のいずれとも一致しません
ただし、ブラウザ、または http://www.digicert.com/help/ を見ると、証明書は正常に見えます。
私のホストは、リクエストからのSNIサポートがないことを示唆しました(そしてGithubは https://github.com/kennethreitz/requests/issues/749 を確認しているようです)。誰かがリクエストを使用して回避策を見つけましたか?
Requestsの現在のバージョンは、SNIでは問題ないはずです。 GitHubの問題をさらに下に 要件を確認できます。
それらのパッケージをインストールしてから、もう一度試してください。
[〜#〜] edit [〜#〜]:リクエストv2.12.1の時点で、ndg-httpsclientおよびpyasn1は不要になりました。必要なパッケージの完全なリストは次のとおりです。
受け入れられた答えを機能させるために、他のパッケージを次の順序でインストールする必要がありました。
このようなリクエストモジュールをインストールします。これにより、セキュリティパッケージエクストラがインストールされます。
pip install requests[security]
または、Python 2.7.9以降:
「Python 3.4のsslモジュールは、Python 2.7.9。正当化についてはPEP 466を参照してください。
現在の(githubからの)リクエストでは、@ Lukasaの回答は正しいです。彼が言及したpip依存関係とは別に、システムにOpenSSLを追加することを忘れないでください。
デプロイメント上の理由で、pipの1.2.3のような安定したリクエストバージョンを好む場合は、次のようにSNIで動作するようにパッチを適用できます。
import requests
def fileno(self):
return self.socket.fileno()
def close(self):
return self.connection.shutdown()
requests.pyopenssl.WrappedSocket.close = close
requests.pyopenssl.WrappedSocket.fileno = fileno
IPアドレスを使用してhttpsサイトにアクセスする から回答をコピーする
MAC High SierraでPython 3.6.4、私は解決策を試しました: requests toolbelt:HostHeaderSSLAdapter 1つ目、残念なことに、それは私にとってはうまくいきませんでした。 forcediphttpsadapter 、最終的に動作するようになりました。
著者は、readmeパートのすべてを説明し、サンプルスクリプトを提供しており、簡単にフォローできます。
1. pip install requests[security] forcediphttpsadapter
でライブラリをインストールします
2.サンプルスクリプトを実行します。
import requests
from forcediphttpsadapter.adapters import ForcedIPHTTPSAdapter
session = requests.Session()
session.mount("https://example.com", ForcedIPHTTPSAdapter(dest_ip='1.2.3.4'))
response = session.get(
'/some/path', headers={'Host': 'example.com'}, verify=False)
注:場合によっては、URLからプレフィックス「www」を削除する必要があります。