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)
Nay*_*iya 100
这是在2017年的答案urllib3不是的一部分requests了
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
Run Code Online (Sandbox Code Playgroud)
ham*_*x0r 29
根据这个github评论,可以urllib3通过requests1-liner 禁用请求警告:
requests.packages.urllib3.disable_warnings()
这将抑制所有警告,不仅仅是InsecureRequest(即它也会抑制InsecurePlatform等).在我们只是想要工作的情况下,我发现简洁方便.
iva*_*eev 26
正确的方法是阅读提供的链接上的相关部分并按照说明进行操作.根据CA证书 - 高级用法 - 请求2.8.1文档的具体方式requests(与其自己的副本捆绑在一起urllib3):
requests 附带自己的证书包(但它只能与模块一起更新)requests v2.4.0)的certifi包,而不是如果已安装它HTTPS证书验证安全措施不是轻松丢弃的.中间人攻击,它可以阻止您保护您免受第三方的侵害,例如躲进或篡改或窃取您的数据.
其中,今天由政府支持的全球黑客行动,如定制接入运营和针对网络基础设施的中国防火墙,比您想象的更可能.
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.9和requests 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)
一条衬垫,如果你import requests之前做过:
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
Run Code Online (Sandbox Code Playgroud)
如果导入的模块使用请求库,这对于使用单元测试的人来说可能很有用。要抑制请求的供应商 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)
警告信息
~/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 中,这些步骤解决了该问题。
import urllib3
urllib3.disable_warnings()
Run Code Online (Sandbox Code Playgroud)
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)
与新库建立依赖关系
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)
| 归档时间: |
|
| 查看次数: |
310420 次 |
| 最近记录: |