我使用Python 2.7.3和请求。我通过pip安装了Requests。我相信这是最新的版本。我在Debian Wheezy上运行。

我在过去使用过很多次请求,从来没有遇到过这个问题,但似乎当使用请求进行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,要么禁用警告,要么提供证书。


当前回答

不要安装pyOpenSSL,因为它很快就会被弃用。目前最好的方法是-

import requests
requests.packages.urllib3.disable_warnings()

其他回答

下面是我在Python 3.6上的工作方式:

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()

如果您无法将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

上周,我在Ubuntu 14.04 (Python 2.7.6)上进行了apt-get dist-upgrade,其中包括libssl1.1:amd64。

由于我从cron作业运行certbot-auto renew,所以我还使用——no-self-upgrade来减少不定期的维护。这似乎是问题的根源。

要修复这个错误,我所需要做的就是成为根用户(使用su的登录开关),并让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的crontab运行:

5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade

在此之后,让sencrypt renwals再次正常运行。

我刚刚在CentOS 5服务器上遇到了类似的问题,我在/usr/local中安装了python 2.7.12,上面是一个旧版本的python2.7。目前在此服务器上无法升级到CentOS 6或7。

一些python 2.7模块仍然存在于旧版本的python中,但pip未能升级,因为CentOS 5包不支持更新的加密包。

具体来说,“pip安装请求[security]”失败,因为CentOS 5上的openssl版本是0.9.8e,不再受加密> 1.4.0的支持。

为了解决OPs最初的问题,我做了:

1) pip install 'cryptography<1.3.5,>1.3.0'.  

这安装了与openssl-0.9.8e一起使用的加密1.3.4。密码学1.3.4也足以满足以下命令的需求。

2) pip install 'requests[security]'

此命令现在安装,因为它不会尝试安装加密> 1.4.0。

注意,在Centos 5上,我还需要:

yum install openssl-devel

让密码学得以建立

这里给出的所有解决方案都没有帮助(我受限于python 2.6.6)。我在传给pip的一个简单的开关中找到了答案:

$ sudo pip install --trusted-host pypi.python.org <module_name>

这告诉pip可以从pypi.python.org获取模块。

对我来说,问题是我的公司防火墙后面的代理,使它看起来像一个恶意的客户端对一些服务器。万岁安全。


更新:见@Alex 's 回答PyPi域的变化,以及可以添加的其他——trusted-host选项。(我复制/粘贴在这里,但他的答案,所以+1他)