如何禁用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)