我正在使用pyVmomi在Python2.6中编写脚本,同时使用其中一个连接方法:

service_instance = connect.SmartConnect(host=args.ip,
                                        user=args.user,
                                        pwd=args.password)

我得到以下警告:

/usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py:734: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)

有趣的是,我没有在pip中安装urllib3(但它在/usr/lib/python2.6/site-packages/requests/packages/urllib3/中)。

我已经按照这里的建议尝试了

import urllib3
...
urllib3.disable_warnings()

但这并没有改变任何事情。


当前回答

使用标准python库'logging'抑制日志


将此代码放在现有代码的顶部

import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)

其他回答

如果您希望禁用警告,但又不想禁用来自其他包或应用程序其他部分的警告,下面介绍如何在每次调用时禁用它们。

步骤1,创建一个上下文管理器。

from contextlib import contextmanager

@contextmanager
def disable_ssl_warnings():
    import warnings
    import urllib3

    with warnings.catch_warnings():
        urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
        yield None

第二步,结束通话:

with disable_ssl_warnings():
    requests.get('https://example.com')

警告只会在那通电话时被解除。

(根据@shazow的回答,这适用于请求>= 2.16.0)

对于Python 3.7.9和请求2.11.1,这是它在OP中抑制特定异常的唯一方法:

import requests
requests.packages.urllib3.disable_warnings(
    requests.packages.urllib3.exceptions.InsecureRequestWarning)

不知道为什么上面的工作,而这个没有:

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

以下是工作版本的简化:

from requests.packages import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

…看起来urllib3的直接导入不包含与请求加载的名称空间相同的名称空间,因此disable_warnings不会改变请求所接触的数据结构。

你可以通过PYTHONWARNINGS环境变量禁用任何Python警告。在本例中,您需要:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

使用Python代码禁用(请求>= 2.16.0):

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

对于< 2.16.0的请求,请参见下面的原始答案。

原来的答案

原因做urllib3.disable_warnings()没有为您工作,因为它看起来像您正在使用请求内部提供的urllib3的单独实例。

我根据这里的路径收集:/usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

要在请求的urllib3中禁用警告,你需要导入模块的特定实例:

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

使用标准python库'logging'抑制日志


将此代码放在现有代码的顶部

import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)

这就是2017年的答案。Urllib3不再是请求的一部分

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)