证书验证失败:无法获取本地颁发者证书 python 请求

ged*_*133 12 python web-scraping python-requests

我正在尝试使用一个非常简单的 python 请求,requests.get但使用此代码收到以下错误:

url = 'https://www.tesco.com/'
status = requests.get(url)
Run Code Online (Sandbox Code Playgroud)

错误:

requests.exceptions.SSLError: HTTPSConnectionPool(host='www.tesco.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)')))
Run Code Online (Sandbox Code Playgroud)

谁能向我解释如何解决这个问题,更重要的是这个错误意味着什么?

非常感谢

Dea*_*nen 17

解释

这些错误是由无效或过期的SSL 证书引起的

当向服务器发出 GET 请求时,例如www.tesco.com您有 2 个选项,一个http和一个https,在 https 的情况下,服务器将为您的请求者(您的脚本)提供 SSL 证书,该证书允许您验证您是否正在连接到合法网站,这也有助于保护和加密脚本和服务器之间传输的数据

解决方案

只需禁用 SSL 检查即可

url = 'https://www.tesco.com/'
requests.get(url, verify=False)
Run Code Online (Sandbox Code Playgroud)

或者

使用会话并禁用 SSL 证书检查

import requests, os

url = 'https://www.tesco.com/'

# Use Session and Disable the SSL Cert Check
session = requests.Session()
session.verify = False
session.trust_env = False
session.get(url=url)
Run Code Online (Sandbox Code Playgroud)

类似的帖子

额外信息 1

确保日期和时间设置正确,因为请求库会检查 SSL 证书与您的本地日期和时间相比的有效日期范围。因为这有时是一个常见问题

额外信息2

您可能需要在您的计算机上安装最新更新的根 CA 证书在此处下载

保密通知

不鼓励使用,verify=false因为它存在安全风险。这意味着您的浏览器或脚本无法验证从网站/网址收到的数据是否确实来自它们(您正在请求的网站)

  • 显然根据文档,强烈建议不要这样做。 (4认同)
  • requests.get(url, verify=False) 这对我有用!非常感谢! (2认同)