InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately
尝试使用以下代码通过python请求执行REST GET,我收到了错误。
代码片段:
1 2 3 4
| import requests
header = {'Authorization': 'Bearer...'}
url = az_base_url + az_subscription_id + '/resourcegroups/Default-Networking/resources?' + az_api_version
r = requests.get(url, headers=header) |
错误:
1 2 3 4 5
| /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.
InsecurePlatformWarning |
我的python版本是2.7.3。 我尝试安装urllib3并请求[安全],因为其他线程建议,我仍然有同样的错误。
想知道是否有人可以提供一些提示?
-
你读过这个链接了吗(urllib3.readthedocs.org/en/latest/…)? 它给出了两个建议:升级到至少Python 2.7.9或使用pyOpenSSL。
-
感谢您的意见。 我试图安装pyOpenSSL但失败了。 让我尝试升级到2.7.9,看看是否能解决问题。
-
@ user4525298通过升级2.7.9解决了你的问题?
-
@NedDeily:链接现在已经破了
-
@Sheena:谢谢。urllib3.readthedocs.io/en/latest/…
文档给出了所需要的公平指标。但是requests允许我们跳过几个步骤:
你只需要安装security包附加功能(感谢@admdrew指出)
1
| $ pip install requests[security] |
或者,直接安装它们:
1
| $ pip install pyopenssl ndg-httpsclient pyasn1 |
然后,请求会自动将pyopenssl注入urllib3
如果您使用的是ubuntu,则可能在安装pyopenssl时遇到问题,您需要这些依赖项:
1
| $ apt-get install libffi-dev libssl-dev |
-
您还可以pip install requests[security]且仅import requests。
-
上面的答案是详细的,但@admdrew提供了最简单的解决方案,最少的头痛。
-
不要忘记--upgrade选项,否则您可能实际上没有安装任何东西。如果您希望系统环境安全,则需要进行安装。所以sudo pip install --upgrade pyopenssl ndg-httpsclient pyasn1 pip在Fedora 20上为我工作,尽管卸载和升级distutils安装的pyopenssl包的弃用警告。
-
在CentOS6上,至少"pip install requests [security]"要求已经安装了"gcc"。是否有任何其他解决方法来获取最新的请求(因为下面的答案提到2.5.3有安全漏洞)并摆脱该警告并且不需要gcc?
-
@jamshid可以在单独的CentOs6机器上预编译它们,然后将它们复制到"实时"机器上。 - vilimpoc.org/blog/2012/11/23/… - 如果遇到麻烦,可能最好创建一个新问题
-
谢谢你的作品在约塞米蒂10.10.4
-
@hobs关于sudo pip install,例如stackoverflow.com/questions/29310688/…作为一般而非牢不可破的规则,您应该使用pip install --user或者最好使用virtualenv来保存所有内容并将其固定。
-
@knickum,是的,这是一个非常好的规则...除了你想要应用于所有用户并让操作系统本身使用最新版本的安全相关补丁。
-
我试试上面的内容,它在ubuntu 12.04下变得更糟......
-
如果机器上没有点子怎么办?
-
cffi安装失败....
-
在CentOS 7上,这需要yum -y install libffi-devel openssl-devel
-
另外,如果你在安装Ubuntu依赖项时遇到问题(我当时),这里有一些更完整的描述:stackoverflow.com/questions/22073516/… (答案相当远)
-
对于Debian,我还需要安装python-dev。
-
在运行Python 2.7.6的Ubuntu 14.04上,建议的pip install requests[security]以error code 1 in /tmp/pip-build-YTQm4B/cryptography/失败
-
在Raspberry Pi上,由于此处描述的问题,我不得不手动安装所需的实用程序,如cffi,enum34,ipaddress,idna,pycparser,加密:github.com/pyca/cryptography/issues/1981
-
保存我的服务器填写error.log文件并导致我的服务器磁盘空间不足。谢谢!
-
关于Ubuntu的那个小小的注释帮助了很多。谢谢!
如果您无法将Python版本升级到2.7.9,并且想要禁止警告,
您可以将"请求"版本降级到2.5.3:
1
| pip install requests==2.5.3 |
2.6.0中引入了Bugfix披露/警告
-
虽然这有效,但这可能不是最好的答案。
-
这种差异隐藏了2.6.0包含安全修复的事实;降级让你暴露。
-
admdrew对上述答案的评论是一个更好,更简单的解决方案。只需pip install requests[security]
-
对于大多数情况,上述答案可能更好,但是这一个是唯一适用于具有您无法控制的本机库的共享主机的情况。 requests[security]不起作用,但旧版本没有。
-
这不适合我。我得到相同的InsecurePlatformWarning,它不会下载旧版本的请求。
-
如果pip本身受InsecurePlatformWarning的影响且无法从PyPI安装任何东西,可以通过这个循序渐进的指南修复它 - 对于较旧的Linux系统很方便.. @Brian