我正在使用Python 2.7.3和请求。我通过pip安装了Requests。我相信它是最新版本。我在Debian Wheezy上运行。
我过去曾多次使用过Requests并且从未遇到过此问题,但似乎在使用Requests
发出https请求时,我得到了InsecurePlatform
例外。
错误提及urllib3
,但我没有安装。我确实安装了它以检查它是否解决了错误,但它没有。
/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3
/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not
available. This prevents urllib3 from configuring SSL appropriately and
may cause certain SSL connections to fail. For more information, see
https://urllib3.readthedocs.org/en/latest
/security.html#insecureplatformwarning.
关于我为什么会这样做的任何想法?我已按照错误消息中的说明检查了文档,但文档说要导入urllib3并禁用警告或提供证书。
答案 0 :(得分:384)
使用隐藏的安全功能:
pip install requests[security]
要么
pip install pyOpenSSL ndg-httpsclient pyasn1
两个命令都安装以下额外包:
请注意,python-2.7.9+不需要这样做。
如果pip install
失败并出现错误,请检查您的系统中是否安装了libffi
,libssl
和python
所需的开发包使用分发包管理器< /强>:
Debian / Ubuntu - python-dev
libffi-dev
libssl-dev
个套餐。
Fedora - openssl-devel
python-devel
libffi-devel
个套餐。
上面的发行列表不完整。
解决方法(see the original answer by @TomDotTom):
如果您无法安装某些必需的开发包,还可以选择禁用该警告:
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()
如果您的pip
本身受InsecurePlatformWarning
影响并且无法从PyPI安装任何内容,可以使用this step-by-step guide修复它以手动部署额外的python包。
答案 1 :(得分:68)
请求2.6为2.7.9之前的python用户引入了此警告,只提供了库存SSL模块。
假设你无法升级到更新版本的python,这将安装更多最新的python SSL库:
pip install --upgrade ndg-httpsclient
然而,在没有pyOpenSSL的构建依赖性的某些系统上,这可能会失败。在debian系统上,在上面的pip命令之前运行它应该足以使pyOpenSSL构建:
apt-get install python-dev libffi-dev libssl-dev
答案 2 :(得分:18)
我不是在生产中使用它,只是一些测试跑步者。并重申urllib3 documentation
如果您知道自己在做什么,并希望禁用此功能 其他警告
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()
编辑/更新:
以下内容也应该有效:
import logging
import requests
# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)
答案 3 :(得分:7)
如果您无法升级您的Python版本为2.7.9,并且想要取消警告,
您可以将“请求”版本降级为2.5.3:
sudo pip install requests==2.5.3
关于版本: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html
答案 4 :(得分:7)
事实上,你可以试试这个。
requests.post("https://www.google.com", verify=False)
您可以阅读请求的代码。
"C:\Python27\Lib\site-packages\requests\sessions.py"
class Session(SessionRedirectMixin):
......
def request(self, method, url,
params=None,
data=None,
headers=None,
cookies=None,
files=None,
auth=None,
timeout=None,
allow_redirects=True,
proxies=None,
hooks=None,
stream=None,
verify=None, # <========
cert=None):
"""
...
:param verify: (optional) if True, the SSL cert will be verified.
A CA_BUNDLE path can also be provided.
...
"""
答案 5 :(得分:5)
这里给出的所有解决方案都没有帮助(我受限于python 2.6.6)。我在一个简单的开关中找到答案传递给pip:
$ sudo pip install --trusted-host pypi.python.org <module_name>
这告诉pip从pypi.python.org获取模块是可以的。
对我来说,问题是我公司的防火墙背后的代理,使它看起来像某些服务器的恶意客户端。万岁安全。
更新:请参阅@Alex的
answer 可以更改PyPi域中的更改,以及可以添加的其他--trusted-host
选项。 (我在这里复制/粘贴,但他的回答,所以+1他)
答案 6 :(得分:3)
这个答案是无关紧要的,但如果您想摆脱警告并从请求中获得以下警告:
InsecurePlatformWarning
/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
您可以通过在python代码中添加以下行来禁用:
requests.packages.urllib3.disable_warnings()
答案 7 :(得分:1)
我必须先去bash
(来自ZSH)。然后
sudo -H pip install 'requests[security]' --upgrade
修复了问题。
答案 8 :(得分:1)
上周,在我apt-get dist-upgrade
libssl1.1:amd64
deb.sury.org
之后,我在Ubuntu 14.04(使用Python 2.7.6)上找到了这个。
由于我从cron作业运行certbot-auto renew
,我还使用--no-self-upgrade
来减少计划外维护。这似乎是麻烦的根源。
要解决此错误,我需要做的就是成为root用户(使用su
&#39; --login
切换)并让certbot-auto
自行升级。我:
sudo su --login
/usr/local/bin/certbot-auto renew
# ... Upgrading certbot-auto 0.8.1 to 0.18.2... blah blah blah ...
而不是通常从root&#39; crontab运行的内容:
5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade
之后,letsencrypt renwals再次正常运行。
答案 9 :(得分:0)
对我来说,没有工作,我需要升级点....
于Debian / Ubuntu
安装依赖项
sudo apt-get install libpython-dev libssl-dev libffi-dev
升级pip并安装软件包
sudo pip install -U pip
sudo pip install -U pyopenssl ndg-httpsclient pyasn1
如果要删除依赖项
sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
sudo apt-get autoremove
答案 10 :(得分:0)
我在CentOS 5服务器上遇到了类似的问题,我在/ usr / local中安装了python 2.7.12,而不是更旧版本的python2.7。升级到CentOS 6或7现在不是这个服务器上的一个选项。
某些python 2.7模块仍然存在于较旧版本的python中,但是pip未能升级,因为CentOS 5软件包不支持更新的加密软件包。
具体来说,&#p;安装请求[安全]&#39;因为CentOS 5上的openssl版本是0.9.8e而已经失败了,密码学不再支持这种版本了。 1.4.0。
为了解决OP的原始问题,我做了:
1) pip install 'cryptography<1.3.5,>1.3.0'.
这个安装的加密1.3.4与openssl-0.9.8e一起使用。密码学1.3.4也足以满足以下命令的要求。
2) pip install 'requests[security]'
现在安装此命令是因为它没有尝试安装加密&gt; 1.4.0。
请注意,在Centos 5上我还需要:
yum install openssl-devel
允许加密构建
答案 11 :(得分:0)
以下是它在Python 3.6上的工作方式:
import requests
import urllib3
# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()
答案 12 :(得分:0)
不要安装pyOpenSSL,因为它很快就会被弃用。目前最好的方法是 -
import requests
requests.packages.urllib3.disable_warnings()
答案 13 :(得分:0)
如果您只想停止不安全警告,请执行以下操作:
/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning:正在进行未验证的HTTPS请求。添加 强烈建议进行证书验证。看到: https://urllib3.readthedocs.org/en/latest/security.html InsecureRequestWarning)
做的:
requests.METHOD("https://www.google.com", verify=False)
验证=假
是关键,以下不擅长:
requests.packages.urllib3.disable_warnings()
或
urllib3.disable_warnings()
但是,您必须知道可能会带来潜在的安全风险。
答案 14 :(得分:0)
我在
遇到同样的问题
Mac
Pycharm社区版2019.3
Python解释器3.6。
使用20.0.2升级点对我有用。
Pycharm --> Preferences --> Project Interpreter --> click on pip --> specify version 20.0.2 --> Install package
答案 15 :(得分:0)
在我的情况下,正在处理旧的 ubuntu 可信映像并尝试安装 python dateutil。我必须首先使用以下内容将 python 升级到 2.7.12:
add-apt-repository -y ppa:fkrull/deadsnakes-python2.7
apt-get -y update
apt install -y --force-yes python2.7-minimal
pip install python-dateutil