我使用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/ )。
我按照建议尝试here
import urllib3
...
urllib3.disable_warnings()
但这并没有改变任何事情。
答案 0 :(得分:593)
您可以通过PYTHONWARNINGS
环境变量禁用任何Python警告。在这种情况下,您需要:
export PYTHONWARNINGS="ignore:Unverified HTTPS request"
禁用Python代码(requests >= 2.16.0
):
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
对于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)
答案 1 :(得分:83)
这是2017年的答案。urllib3
不再是requests
的一部分
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
答案 2 :(得分:26)
正确的方法是阅读the relevant section on the provided link并按照说明行事。根据{{3}} requests
(与urllib3
的副本捆绑在一起)的具体方式:
requests
附带自己的证书包(但只能与模块一起更新)requests
v2.4.0
) certifi
包
HTTPS证书验证安全措施不能轻易放弃。中间人攻击,它阻止你保护你免受第三方的攻击,例如在中啜饮病毒或篡改或窃取您的数据。
当今政府支持的全球黑客行为(如CA Certificates — Advanced Usage — Requests 2.8.1 documentation和Tailored Access Operations针对网络基础设施)比你想象的更可能。
答案 3 :(得分:23)
根据this github条评论,您可以通过{1}中的urllib3
禁用requests
请求警告:
requests.packages.urllib3.disable_warnings()
这会抑制所有警告,而不仅仅是InsecureRequest
(即它还会抑制InsecurePlatform
等)。在我们只是想要工作的情况下,我发现简洁方便。
答案 4 :(得分:8)
对于不耐烦,快速禁用python unverified HTTPS警告的方法:
export PYTHONWARNINGS="ignore:Unverified HTTPS request"
答案 5 :(得分:3)
如果某些软件包供应商拥有自己的urllib3副本,则可接受的答案不起作用,在这种情况下,它仍然有效:
import warnings
warnings.filterwarnings('ignore', message='Unverified HTTPS request')
答案 6 :(得分:1)
我与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。
答案 7 :(得分:1)
为什么不使用pyvmomi original function SmartConnectNoSSL
。
他们June 14, 2016
将此功能added命名为ConnectNoSSL
,one day after他们将名称更改为SmartConnectNoSSL
,而不是通过不必要的行传递警告您项目中的代码?
提供连接到没有SSL的指定服务器的标准方法 验证。连接到具有自签名证书的服务器时很有用 或当您希望完全忽略SSL时
service_instance = connect.SmartConnectNoSSL(host=args.ip,
user=args.user,
pwd=args.password)
答案 8 :(得分:1)
警告信息
<块引用>~/venv/lib/python3.4/site-packages/urllib3/connectionpool.py:857: InsecureRequestWarning: 正在发出未经验证的 HTTPS 请求。强烈建议添加证书验证。见:https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings 不安全请求警告)
在 Debian 8 中,此步骤有效
import urllib3
urllib3.disable_warnings()
libssl1.0.0_1.0.2l-1_bpo8+1_amd64.deb
<块引用>libssl-dev_1.0.2l-1_bpo8+1_amd64.deb
使用新库构建依赖
python3 -m venv .venv
source .venv/bin/activate
在虚拟环境中的python项目下清洁安装模块
python3 -m pip install -e .
答案 9 :(得分:1)
对于 Python 3.7.9
和 requests 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
的直接导入不包含与 requests
加载的命名空间相同的命名空间,因此 disable_warnings
不会改变所触及的数据结构来自requests
。
答案 10 :(得分:0)
Python 2.7
将环境变量PYTHONWARNINGS添加为键,并将相应的值添加为:
os.environ['PYTHONWARNINGS']="ignore:Unverified HTTPS request"
答案 11 :(得分:0)
将此代码放在现有代码的顶部
import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)
答案 12 :(得分:-10)
解决了我MacBook上的问题:
pip install certifi
或
pip3 install certifi