首页  >  文章  >  后端开发  >  如何在 Python 请求中禁用 SSL 证书验证?

如何在 Python 请求中禁用 SSL 证书验证?

DDD
DDD原创
2024-10-27 06:04:29392浏览

How can I disable SSL certificate verification in Python requests?

在 Python 请求中禁用安全证书验证

发出 HTTPS 请求时,Python 的 requests 库会验证服务器的 SSL 证书以确保连接安全。但是,在某些情况下,例如访问证书过期的网站时,您可能希望禁用此验证。

要禁用证书验证,请在 requests.post 函数中使用 verify 参数。将其设置为 False,如下所示:

<code class="python">import requests
requests.post(url='https://foo.example', data={'bar':'baz'}, verify=False)</code>

这允许在不验证 SSL 证书的情况下发出请求。然而,值得注意的是,这可能会带来安全风险,因为它可能导致中间人攻击。请谨慎使用此选项。

使用上下文管理器进行 SSL 验证

如果您需要对特定上下文中的多个请求禁用 SSL 验证,您可以使用上下文管理器如下:

<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):
        # ...

    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

with no_ssl_verification():
    # Make requests without SSL verification here</code>

此上下文管理器暂时将块内发出的所有请求的 verify 设置为 False,然后在块退出时恢复为默认行为。它还会抑制否则会触发的 SSL 警告。

以上是如何在 Python 请求中禁用 SSL 证书验证?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn