2013-03-16 7 views
74

Python güvenlik sertifikası kontrolünü istekleri devre dışı bırakırım ama request.exceptions.SSLError olsun. Web sitesinin süresi dolmuş bir sertifikası var, ancak hassas veri göndermiyorum, bu yüzden benim için önemli değil. Kullanabileceğim 'verifiy = False' gibi bir argüman olduğunu düşünürdüm ama onu bulamıyorum. the documentation itibarennasıl <pre><code>import requests requests.post(url='https://foo.com', data={'bar':'baz'}) </code></pre> <p></p> kullanıyorum

cevap

146

: false olarak verify ayarlarsanız

talepler ayrıca SSL certficate doğrulayarak göz ardı edebilirsiniz. Bir üçüncü taraf modülü kullanarak konum ve kontrollerini devre dışı bırakmak istiyorsanız

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

, burada bir bağlam yöneticisi O maymun yamaları requests var ve verify=False varsayılan ve uyarıyı bastırır, böylece onu değiştirir.

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 

Ve nasıl kullanılacağını bir örnek:

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

Teşekkür, bu kendi kodu içinde aramaları işleri, ama bunu, istekleri kullanan üçüncü bir kütüphanede devre dışı bırakmak istediğimi düşünün. 3. parti libresini bu şekilde düzeltmek imkansız olurdu. – sorin

+6

@sorin: Sadece maymun düzeltme ekini 'istekleri' ve 'doğrula' yanlış seçeneğine sahip ol. – Blender

+2

Hâlâ basılan büyük iğrenç uyarı mesajını nasıl bastırırım? – Michael

37

Kullanım requests.packages.urllib3.disable_warnings(). Eğer = False seçeneği doğrulamak ile istek sonrası tam olarak göndermek istiyorsanız

import requests 

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

Cevabınız "Doğrulanmamış HTTPS isteği yapılmakta" gibi uyarılardan kurtulmak istediğinizde yararlıdır. Ancak '' doğrulama = Yanlış '' zaten mevcut olmalı. Tnx. – Lufa

+1

Ve tüm uyarıları saklamaktan kaçınmak için: 'urllib3.exceptions içe aktarma InsecureRequestWarning' sonra' requests.packages.urllib3.disable_warnings (category = InsecureRequestWarning) ' –

3

, en hızlı şekilde bu kodu kullanmaktır: Eğer birkaç istekleri varsa

import requests 

requests.api.request('post', url, data={'bar':'baz'}, json=None, verify=False) 
İlgili konular