【问题标题】:requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failedrequests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败
【发布时间】:2016-11-26 03:36:37
【问题描述】:

如果没有收到错误 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed,我无法请求流行的 SSL 站点。

请求documentation 声明

默认情况下,Requests 捆绑了一组它信任的根 CA,来源 来自 Mozilla 信任库。但是,这些仅更新一次 每个请求版本。这意味着如果您固定请求版本 您的证书可能会变得非常过时。

由于这是一个受欢迎的网站,当我使用 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)

操作系统: Windows 8

我做错了什么?

【问题讨论】:

  • 可能是您的代理在进行 SSL 拦截。也可能是站点的设置引起了问题。也可能是您正在使用带有旧证书存储的非常旧版本的请求。不幸的是,无法通过您提供的信息来判断出了什么问题,因为本质上您只是在告诉您正在使用某些未知版本的请求,并且某些未知代理访问了某些未知站点。除此之外,您对 http 和 https 有不同的代理设置并且 https 代理在端口 443 等上运行是不常见的。
  • 我已经在版本中添加了,是最新版本。可能是代理正在像您提到的那样进行一些拦截。
  • 我决定它一定是代理,它正在使用 SSL 检查。

标签: python http ssl https python-requests


【解决方案1】:
r = requests.get('https://www.example.com', proxies=proxies, verify=False)

更改此行,它将起作用。

【讨论】:

  • 确实可以,但是我想知道为什么它没有验证。
猜你喜欢
  • 2017-02-05
  • 1970-01-01
  • 2021-09-28
  • 2021-10-08
  • 1970-01-01
  • 2018-07-29
  • 2017-06-01
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多