私はPython 2.7.3とRequestsを使っています。私はpip経由でRequestsをインストールしました。最新版だと思います。私はDebian Wheezyを使っています。
私は過去にRequestsを何度も使ってきましたが、この問題に直面することはありませんでしたが、Requests
を使ってhttpsリクエストを行うとInsecurePlatform
例外が発生するようです。
エラーはurllib3
に言及していますが、私はそれをインストールしていません。エラーが解決したかどうかを確認するためにインストールしましたが、解決しませんでした。
/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3
/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not
available. This prevents urllib3 from configuring SSL appropriately and
may cause certain SSL connections to fail. For more information, see
https://urllib3.readthedocs.org/en/latest
/security.html#insecureplatformwarning.
私がこれを手に入れた理由について何か考えはありますか?エラーメッセージで指定されているとおりにドキュメントを確認しましたが、ドキュメントはurllib3をインポートして警告を無効にするか証明書を提供するように言っています。
やや隠された security 機能を使う:
pip install requests[security]
またはpip install pyOpenSSL ndg-httpsclient pyasn1
どちらのコマンドも、次の追加パッケージをインストールします。
これは python-2.7.9 + には必要ないことに注意してください。
pip install
がエラーで失敗した場合、あなたのシステムにインストールされているlibffi
、libssl
およびpython
の開発パッケージが必要かどうかをチェックしてください ディストリビューションのパッケージマネージャを使って
Debian / Ubuntu - python-dev
libffi-dev
libssl-dev
パッケージ。
Fedora - openssl-devel
python-devel
libffi-devel
パッケージ。
上記のディストリビューションリストは不完全です。
回避策 ( @TomDotTomによる元の回答を参照 ) :
必要な開発パッケージのいくつかをインストールできない場合は、その警告を無効にするオプションもあります。
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()
pip
自体がInsecurePlatformWarning
の影響を受けてPyPIから何かをインストールできない場合は、 このステップバイステップガイド を使用して手動で追加のpythonパッケージをデプロイすることで修正できます。
リクエスト2.6では、2.7.9より前のpythonのユーザに対して、利用可能な標準のSSLモジュールのみでこの警告を導入しました。
あなたがより新しいバージョンのpythonにアップグレードすることができないと仮定すると、これはより最新のpython SSLライブラリをインストールするでしょう:
pip install --upgrade ndg-httpsclient
ただし、pyOpenSSLのビルド依存関係がないと、システムによってはこれが失敗することがあります。 Debianシステムでは、上記のpipコマンドの前にこれを実行することでpyOpenSSLを構築するのに十分なはずです:
apt-get install python-dev libffi-dev libssl-dev
私は本番環境では使用しません。一部のテストランナーだけを使用します。そして urllib3のドキュメントを繰り返します
自分のしていることがわかっていて、この警告やその他の警告を無効にしたい場合
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()
編集/更新
次のものも動作するはずです。
import logging
import requests
# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)
あなたが アップグレードできない あなたのPythonバージョンを2.7.9にして、警告を抑制したいのなら、
あなたはできる あなたの「要求」を格下げする 2.5.3へのバージョン:
Sudo pip install requests==2.5.3
バージョンについて: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html
実際、これを試すことができます。
requests.post("https://www.google.com", verify=False)
リクエストのコードを読むことができます。
"C:\Python27\Lib\site-packages\requests\sessions.py"
class Session(SessionRedirectMixin):
......
def request(self, method, url,
params=None,
data=None,
headers=None,
cookies=None,
files=None,
auth=None,
timeout=None,
allow_redirects=True,
proxies=None,
hooks=None,
stream=None,
verify=None, # <========
cert=None):
"""
...
:param verify: (optional) if True, the SSL cert will be verified.
A CA_BUNDLE path can also be provided.
...
"""
ここで与えられた解決策のすべては助けていません(私はpython 2.6.6に制限されています)。私はpipに渡すための簡単なスイッチで答えを見つけました:
$ Sudo pip install --trusted-Host pypi.python.org <module_name>
これは、pypi.python.orgからモジュールを入手しても問題ないことをpipに伝えます。
私にとっては、ファイアウォールの背後にある私の会社のプロキシが、一部のサーバーにとって悪意のあるクライアントのように見えるという問題があります。万歳セキュリティ。
更新:PyPiドメインの変更と追加できる--trusted-Host
オプションについては@Alexの answer をご覧ください。 (私はここにコピー/貼り付けしますが、彼の答えは、+1彼です)
この答えは無関係ですが、もしあなたが 警告を取り除きたいなら そしてリクエストから次のような警告を得ます:
InsecurePlatformWarning /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
あなたのPythonコードに次の行を追加することで disable itできます:
requests.packages.urllib3.disable_warnings()
私はapt-get dist-upgrade
からのlibssl1.1:AMD64
を含むdeb.sury.org
をした後のUbuntu 14.04(Python 2.7.6を含む)で私に思い付きました。
私はcronジョブからcertbot-auto renew
を実行しているので、--no-self-upgrade
を使って予定外のメンテナンスを減らすこともできます。これが問題の原因となっているようです。
エラーを修正するには、(su
の--login
スイッチを使って)rootになり、certbot-auto
自身をアップグレードさせるだけでした。イー:
Sudo su --login
/usr/local/bin/certbot-auto renew
# ... Upgrading certbot-auto 0.8.1 to 0.18.2... blah blah blah ...
通常rootのcrontabから実行するのではなく、
5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade
その後、letsencryptのrenwalsは再び正常に実行されました。
最初に(ZSHから)bash
に行かなければなりませんでした。それから
Sudo -H pip install 'requests[security]' --upgrade
問題を修正しました。
次のように安全でない警告をやめたい場合は、
/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794:InsecureRequestWarning:未確認のHTTPS要求が行われています。証明書検証を追加することを強くお勧めします。参照してください: https://urllib3.readthedocs.org/en/latest/security.html InsecureRequestWarning)
行う:
requests.METHOD("https://www.google.com", verify=False)
verify = False
重要なのは、次のことはそれで得意ではありません:
requests.packages.urllib3.disable_warnings()
または
urllib3.disable_warnings()
しかし、あなたは知っておくべきです、 それは潜在的なセキュリティリスクを引き起こすかもしれません 。
PyOpenSSLは近日中に非推奨になるのでインストールしないでください。現在の最善のアプローチは
import requests
requests.packages.urllib3.disable_warnings()
Python 3.6で私がどのように機能しているかを以下に示します。
import requests
import urllib3
# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()
私の仕事のために私はピップをアップグレードする必要はありません....
Debian/Ubuntu
依存関係をインストールする
Sudo apt-get install libpython-dev libssl-dev libffi-dev
pipをアップグレードしてパッケージをインストールする
Sudo pip install -U pip
Sudo pip install -U pyopenssl ndg-httpsclient pyasn1
依存関係を削除したい場合
Sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
Sudo apt-get autoremove
私はちょうどもっと古いバージョンのpython2.7の上の/ usr/localにpython 2.7.12をインストールしたCentOS 5サーバーで同様の問題を抱えていました。 CentOS 6または7にアップグレードすることは、現時点ではこのサーバーのオプションではありません。
Python 2.7モジュールの中には古いバージョンのpythonからまだ存在していたものもありますが、新しい暗号化パッケージがCentOS 5パッケージでサポートされていないため、pipはアップグレードに失敗しました。
具体的には、CentOS 5のopensslバージョンが0.9.8eで、暗号化> 1.4.0ではサポートされなくなったため、 'pip install requests [security]'は失敗していました。
私がしたOPの元の問題を解決するために:
1) pip install 'cryptography<1.3.5,>1.3.0'.
これにより、openssl-0.9.8eで動作する暗号化方式1.3.4がインストールされました。次のコマンドの要件を満たすには、cryptograpy 1.3.4でも十分です。
2) pip install 'requests[security]'
暗号化> 1.4.0をインストールしようとしないため、このコマンドはインストールされます。
Centos 5では、次の作業も必要でした。
yum install openssl-devel
暗号化の構築を許可する