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

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

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

其他回答

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

import warnings

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

HTTPS证书验证安全措施不是可以轻易丢弃的东西。它所防止的中间人攻击可以保护您免受第三方的攻击,例如在您的数据中植入病毒或篡改或窃取您的数据。 即使您只打算在测试环境中执行该操作,当迁移到其他地方时,您也很容易忘记撤消它。

相反,请阅读所提供链接的相关部分,并按照它所说的去做。根据CA证书-高级用法-请求2.8.1文档,特定于请求的方式(捆绑在自己的urllib3副本中):

请求附带它自己的证书包(但它只能与模块一起更新) 如果已经安装,它将使用(因为请求v2.4.0)证书包 在测试环境中,您可以按照“如何更新证书的根证书?”. 例如,如果你用你的测试证书替换了它的包,如果你在转向生产时忘记撤销它,你会立即看到它。

最后,如今政府支持的全球黑客行动,如针对性的访问行动和中国的防火长城,目标是网络基础设施,遭受MITM攻击的可能性比你想象的要大。

你可以通过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 2.7

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

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

根据这条github评论,可以通过1-line中的请求禁用urllib3请求警告:

requests.packages.urllib3.disable_warnings ()

这将抑制所有的警告,但不只是insecuerequest(即它也将抑制InsecurePlatform等)。在我们只是想让东西工作的情况下,我发现简洁很方便。