抑制InsecureRequestWarning:在Python2.6中进行未验证的HTTPS请求

Pat*_*ryk 283 python python-2.6 suppress-warnings urllib3 pyvmomi

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

service_instance = connect.SmartConnect(host=args.ip,
                                        user=args.user,
                                        pwd=args.password)
Run Code Online (Sandbox Code Playgroud)

我收到以下警告:

/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)
Run Code Online (Sandbox Code Playgroud)

有趣的是,我没有使用pip安装urllib3(但它位于/usr/lib/python2.6/site-packages/requests/packages/urllib3/).

我按照这里的建议尝试过

import urllib3
...
urllib3.disable_warnings()
Run Code Online (Sandbox Code Playgroud)

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

sha*_*zow 682

您可以通过PYTHONWARNINGS环境变量禁用任何Python警告.在这种情况下,您需要:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"
Run Code Online (Sandbox Code Playgroud)

要禁用Python代码(requests >= 2.16.0):

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Run Code Online (Sandbox Code Playgroud)

对于requests < 2.16.0,请参阅下面的原始答案.

原始答案

这样urllib3.disable_warnings()做的原因不适合你,因为看起来你在请求中使用了一个独立的urllib3实例.

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

要禁用请求'vendored urllib3中的警告,您需要导入该模块的特定实例:

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

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
Run Code Online (Sandbox Code Playgroud)

  • `PYTHONWARNINGS ="忽略:未验证的HTTPS请求"` (34认同)
  • 复制自Nayana Adassuriya的答案:`import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)`. (3认同)
  • 为了完整性:`from requests.packages.urllib3.exceptions import InsecureRequestWarning` (2认同)
  • 这个答案已经过时了.对于现代版本,请参阅Nayana Adassuriya的回答. (2认同)

Nay*_*iya 100

这是在2017年的答案urllib3不是的一部分requests

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Run Code Online (Sandbox Code Playgroud)

  • 年份的重要性低于您正在使用的python版本号. (6认同)
  • 是的,修订比年度更重要。这是针对“请求&gt; = 2.16.0” (3认同)
  • 我对这个回应感到困惑。我的“requests”版本是“2.21.0”,它有“urllib3”。我尝试了“2.16.0”、“2.16.1”和“2.17.0”,它们都有“urllib3”。我尝试了“2.4.0”,但那个没有。他们把它加回来了吗? (2认同)

ham*_*x0r 29

根据这个github评论,可以urllib3通过requests1-liner 禁用请求警告:

requests.packages.urllib3.disable_warnings()

这将抑制所有警告,不仅仅是InsecureRequest(即它也会抑制InsecurePlatform等).在我们只是想要工作的情况下,我发现简洁方便.

  • `requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)` 似乎有效。 (6认同)
  • 这是2.7的最佳选择,因为我不需要导入urllib3来抑制警告 (3认同)

iva*_*eev 26

正确的方法是阅读提供的链接上的相关部分并按照说明进行操作.根据CA证书 - 高级用法 - 请求2.8.1文档的具体方式requests(与其自己的副本捆绑在一起urllib3):

  • requests 附带自己的证书包(但它只能与模块一起更新)
  • 它将使用(因为requests v2.4.0)certifi,而不是如果已安装它

HTTPS证书验证安全措施不是轻松丢弃的.中间人攻击,它可以阻止您保护您免受第三方的侵害,例如躲进或篡改或窃取您的数据.

其中,今天由政府支持的全球黑客行动,如定制接入运营和针对网络基础设施的中国防火墙,比您想象的更可能.

  • 如果我想听有关 TLS 证书的讲座,我会点击错误消息中的链接。 (8认同)
  • @AlexBartiş如果您(或您调用的某些代码)通过`verify = False`,这可能是. (3认同)
  • 为什么这个答案的选票很少?忽略这些警告实际上安全吗? (2认同)
  • @sgryzko仅当您不关心有人冒充远程服务器时。也许,许多人确实不关心和/或不阅读第一个答案之外的内容,这有助于积极的反馈循环。这个答案也是在差不多一年后发布的。 (2认同)
  • 是的,您应该在生产环境中做正确的事,并且盲目地抑制错误是不好的。但是,在测试环境中抑制这些错误是完全合法的。 (2认同)

Yig*_*gal 26

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

import warnings

warnings.filterwarnings('ignore', message='Unverified HTTPS request')
Run Code Online (Sandbox Code Playgroud)


Tim*_*inn 24

对于Python 3.7.9requests 2.11.1,这是抑制 OP 中特定异常的唯一方法:

import requests
requests.packages.urllib3.disable_warnings(
    requests.packages.urllib3.exceptions.InsecureRequestWarning)
Run Code Online (Sandbox Code Playgroud)

不知道为什么上面的方法有效,而这个却不起作用:

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Run Code Online (Sandbox Code Playgroud)

这是工作版本的简化:

from requests.packages import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Run Code Online (Sandbox Code Playgroud)

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


FMC*_*orz 13

如果您想禁用警告,但不想消除来自其他包或应用程序其他部分的警告,请按以下方法在每次调用时禁用它们。

第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
Run Code Online (Sandbox Code Playgroud)

第 2 步,结束通话:

with disable_ssl_warnings():
    requests.get('https://example.com')
Run Code Online (Sandbox Code Playgroud)

仅针对该调用,警告才会静音。

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


Wen*_* Li 10

对于不耐烦,快速禁用python unverified HTTPS警告的方法:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"
Run Code Online (Sandbox Code Playgroud)


Jay*_* D. 8

一条衬垫,如果你import requests之前做过:

requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
Run Code Online (Sandbox Code Playgroud)


Vla*_*irB 6

如果导入的模块使用请求库,这对于使用单元测试的人来说可能很有用。要抑制请求的供应商 urllib3 中的警告,请添加

warnings.filterwarnings('ignore', message='Unverified HTTPS request')
Run Code Online (Sandbox Code Playgroud)

在你的测试类中设置方法,即:

import unittest, warnings

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


Esm*_*elE 6

警告信息

~/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 中,这些步骤解决了该问题。

  1. 在python3代码中
import urllib3
urllib3.disable_warnings()
Run Code Online (Sandbox Code Playgroud)
  1. 在 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 安装。

import urllib3
urllib3.disable_warnings()
Run Code Online (Sandbox Code Playgroud)

与新库建立依赖关系

  1. 为python项目创建新的venv
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
Run Code Online (Sandbox Code Playgroud)

在虚拟环境中的 python 项目下干净安装模块

python3 -m venv .venv
source .venv/bin/activate
Run Code Online (Sandbox Code Playgroud)