2013-03-16 14 views
74

を要求無効にします。 ウェブサイトの有効期限が切れた証明書がありますが、機密データを送信していないため、私には関係ありません。 私が使うことができる 'verifiy = False'のような議論があるとは思いますが、見つけられないようです。は、どのように私はPythonでセキュリティ証明書のチェックは、私が</p> <pre><code>import requests requests.post(url='https://foo.com', data={'bar':'baz'}) </code></pre> <p>を使用していますが、私はrequest.exceptions.SSLErrorを得る

答えて

146

the documentationから:あなたはFalseに verifyを設定している場合

要求は、SSL certficateを検証無視することができます。

>>> requests.get('https://kennethreitz.com', verify=False) 
<Response [200]> 

あなたは、サードパーティ製のモジュールを使用してチェックを無効にしたい場合は、ここではコンテキストマネージャは、猿のパッチrequestsことだとverify=Falseがデフォルトであるとの警告を抑制するように変更します。

import warnings 
import requests 
import contextlib 

try: 
    from functools import partialmethod 
except ImportError: 
    # Python 2 fallback: https://gist.github.com/carymrobbins/8940382 
    from functools import partial 

    class partialmethod(partial): 
     def __get__(self, instance, owner): 
      if instance is None: 
       return self 

      return partial(self.func, instance, *(self.args or()), **(self.keywords or {})) 

@contextlib.contextmanager 
def no_ssl_verification(): 
    old_request = requests.Session.request 
    requests.Session.request = partialmethod(old_request, verify=False) 

    warnings.filterwarnings('ignore', 'Unverified HTTPS request') 
    yield 
    warnings.resetwarnings() 

    requests.Session.request = old_request 

そして、それを使用する方法の例:

with no_ssl_verification(): 
    requests.get('https://93.184.216.3/') 
    print('It works') 

try: 
    requests.get('https://93.184.216.3/') 
except requests.exceptions.SSLError: 
    print('It broke') 
+6

おかげで、これは自分のコード内で呼び出して動作しますが、しかし、私がリクエストを使用する第3の部分ライブラリでこれを無効にしたいと想像してください...これのようなサードパーティのlibを修正することは不可能です。 – sorin

+6

@ソリン:ちょうどモンキーパッチ '要求'と '検証'デフォルトは 'False'です。 – Blender

+2

まだ印刷されている厄介な警告メッセージを抑制するにはどうすればよいですか? – Michael

37

使用requests.packages.urllib3.disable_warnings()。あなたは= Falseのオプションを確認してリクエストを投稿し、正確に送信したい場合は

import requests 

requests.packages.urllib3.disable_warnings() 
requests.post(url='https://foo.com', data={'bar':'baz'}) 
+6

あなたの答えは、「未確認のHTTPS要求が行われている」のような警告を取り除きたい場合に便利です。 しかし、 '' verify = False''はとにかく存在しなければなりません。 Tnx。 – Lufa

+1

そしてすべての警告を隠すことを避けるために: 'from urllib3.exceptions import InsecureRequestWarning'それから' requests.packages.urllib3.disable_warnings(category = InsecureRequestWarning) ' –

3

は、最速の方法は、このコードを使用することです:あなたは、いくつかの要求を持っている場合

import requests 

requests.api.request('post', url, data={'bar':'baz'}, json=None, verify=False) 
関連する問題

 関連する問題