如何禁用Python请求中的安全证书检查

我在用

import requests requests.post(url='https://foo.com', data={'bar':'baz'}) 

但是我得到一个request.exceptions.SSLError。 该网站有一个过期的证书,但我没有发送敏感数据,所以对我无关紧要。 我会想象有一个像我可以使用的“verifiy = False”这样的参数,但我似乎无法find它。

从文档 :

如果将verify设置为False,请求也可以忽略validationSSL证书。

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

如果您正在使用第三方模块并且想要禁用检查,那么这里有一个上下文pipe理器,用于修改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') 

使用requests.packages.urllib3.disable_warnings()。

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

如果你想发送精确的post请求与validation= False选项,最快的方法是使用此代码:

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