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

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


当前回答

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

requests.packages.urllib3.disable_warnings ()

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

其他回答

为什么不使用pyvmomi原始函数SmartConnectNoSSL。 他们在2016年6月14日添加了这个函数,并将其命名为ConnectNoSSL,一天后他们将名称更改为SmartConnectNoSSL,使用它而不是通过在您的项目中传递不必要的代码行警告?

提供不使用SSL连接到指定服务器的标准方法 验证。在连接到具有自签名证书的服务器时非常有用 或者当您希望完全忽略SSL时

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

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

requests.packages.urllib3.disable_warnings ()

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

对于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不会改变请求所接触的数据结构。

对于Python 2.7

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

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

我有类似的问题与PyVmomi客户端。在Python 2.7.9版本中,我用下面的代码行解决了这个问题:

default_sslContext = ssl._create_unverified_context()
self.client = \
                Client(<vcenterip>, username=<username>, password=<passwd>,
                       sslContext=default_sslContext )

请注意,要做到这一点,你至少需要Python 2.7.9。