在 Python 请求中禁用安全证书验证
使用 Python 请求库与 HTTPS 端点交互时,您可能会遇到与无效 SSL 相关的错误证书。为了缓解这个问题,您可以在请求中禁用证书验证。
根据官方文档,您可以通过将 verify 参数设置为 False 来实现此目的。这指示请求绕过证书验证。
<code class="python">import requests requests.post(url='https://foo.example', data={'bar': 'baz'}, verify=False)</code>
或者,对于可能处理 SSL 验证的第三方模块,您可以使用上下文管理器来抑制警告并禁用验证。这涉及到将 requests.Session.merge_environment_settings 方法替换为默认将 verify 设置为 False 的自定义版本。
<code class="python">import warnings import contextlib import requests from urllib3.exceptions import InsecureRequestWarning old_merge_environment_settings = requests.Session.merge_environment_settings @contextlib.contextmanager def no_ssl_verification(): opened_adapters = set() def merge_environment_settings(self, url, proxies, stream, verify, cert): opened_adapters.add(self.get_adapter(url)) settings = old_merge_environment_settings(self, url, proxies, stream, verify, cert) settings['verify'] = False return settings requests.Session.merge_environment_settings = merge_environment_settings try: with warnings.catch_warnings(): warnings.simplefilter('ignore', InsecureRequestWarning) yield finally: requests.Session.merge_environment_settings = old_merge_environment_settings for adapter in opened_adapters: try: adapter.close() except: pass</code>
您可以按如下方式使用此上下文管理器:
<code class="python">with no_ssl_verification(): requests.get('https://wrong.host.badssl.example/') print('It works') requests.get('https://wrong.host.badssl.example/', verify=False) print('It resets back')</code>
它值得注意的是,此解决方案会影响上下文管理器范围内发出的所有请求。因此,除非明确指定,后续请求也将绕过证书验证。
以上是如何在Python请求中禁用安全证书验证?的详细内容。更多信息请关注PHP中文网其他相关文章!