我正在使用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()

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


当前回答

如果导入的模块使用请求库,这可能对使用unittest的人有用。 要在请求所提供的urllib3中删除警告,请添加

warnings.filterwarnings('ignore', message='Unverified HTTPS request')

到setUp方法在你的测试类,即:

import unittest, warnings

class MyTests(unittest.TestCase):
    
    def setUp(self):
        warnings.filterwarnings('ignore', message='Unverified HTTPS request')
    
    (all test methods here)

其他回答

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

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

如果某些包供应商提供了urllib3的副本,则接受的答案将不起作用,在这种情况下,这仍然有效:

import warnings

warnings.filterwarnings('ignore', message='Unverified HTTPS request')

警告消息

~/venv/lib/python3.4/site-packages/urllib3/connectionpool.py:857: InsecureRequestWarning:未经验证的HTTPS请求正在发出。强烈建议添加证书验证。见:https://urllib3.readthedocs.io/en/latest/advanced-usage.html ssl-warnings InsecureRequestWarning)

在Debian 8中,这些步骤修复了这个问题。

用python3代码

import urllib3
urllib3.disable_warnings()

在Debian上安装两个包

libssl1.0.0_1.0.2L-1_bpo8+1_amd64.deb

libssl-dev_1.0.2L-1_bpo8+1_amd64.deb

debian的镜子 下载以上deb包后,使用apt安装。

apt install ./libssl-dev_1.0.2l-1_bpo8+1_amd64.deb 

apt install ./libssl1.0.0_1.0.2l-1_bpo8+1_amd64.deb

使用新库构建依赖项

为python项目创建新的venv

python3 -m venv .venv
source .venv/bin/activate

在虚拟环境中清洁安装python项目下的模块

python3 -m pip install -e .

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

步骤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 2.7

添加环境变量PYTHONWARNINGS作为键,并忽略对应的值,如下所示:

操作系统。environ['PYTHONWARNINGS']="ignore:未经验证的HTTPS请求"