2016-07-22 121 views
2

我无法请求一个流行的SSL站点,但不会产生错误[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failedrequests.exceptions.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败

documentation指出

By default Requests bundles a set of root CAs that it trusts, sourced from the Mozilla trust store. However, these are only updated once for each Requests version. This means that if you pin a Requests version your certificates can become extremely out of date.

由于这是一个受欢迎的网站应该是在店里,当我用verify=True,但是它不断失败的请求。我也尝试过使用其他SSL地址,但也会因此错误而失败。

import requests 

headers = { 
    'User-agent': 'Mozilla/5.0' 
} 

proxies = { 
    'http' : 'http://1.2.3.4:80', 
    'https' : 'http://1.2.3.4:443' 
} 

r = requests.get('https://www.example.com', proxies=proxies, verify=True) 

请注意,https://www.example.com是一个流行的英国新闻网站,所以它应该在CA商店。

Python版本: Python的2.7.11

请求版本:请求(2.10.0)

OS:的Windows 8

我做得基本上是错误的?

+1

这可能是您的代理正在执行SSL拦截。也可能是网站的设置会导致问题。也可能是您使用旧版证书存储区的旧版本的请求。不幸的是,不可能告诉你所提供的信息出了什么问题,因为基本上你只是告诉你正在使用一些未知版本的请求,而某些未知代理访问某个未知网站。除此之外,对于http和https有不同的代理设置,并且https代理在端口443上运行等是不常见的。 –

+0

我已经在版本中添加了它,它是最新版本。可能是代理正在像你所提到的那样进行一些拦截。 –

+1

我决定它必须是使用SSL检查的代理。 –

回答

0
r = requests.get('https://www.example.com', proxies=proxies, verify=False) 

更改此行,它将工作。

+0

事实上,它会工作,但我想知道它为什么不验证。 –