Requests报”requests.exceptions.SSLError: {ssl error message} “的原因以及解决办法

  • Post category:Python

Requests报”requests.exceptions.SSLError: {ssl error message} “的原因

Requests报”requests.exceptions.SSLError: {ssl error message} “的原因是因为在发送HTTPS请求时,SSL证书校验失败。原因一般有三种:

  1. 证书过期:SSL证书有有效期(通常是1年或2年),过期之后就会导致SSL证书校验失败。

  2. 证书不匹配:证书颁发机构和域名不匹配,或是证书算法不支持或被禁用。

  3. 证书无效:如果服务器配置了自签名证书或者使用了不可信的证书,也会导致SSL证书校验失败。

解决办法

当Requests报”requests.exceptions.SSLError: {ssl error message} “错误时,我们可以尝试以下几种解决办法:

  1. 禁用证书验证:强烈不建议在生产环境中禁用证书验证,因为这样可能会导致安全问题。但是在开发过程中,如果你不关心证书是否正确,可以通过设置verify=False禁用证书验证,从而绕开SSL证书验证。
import requests
response = requests.get('https://www.baidu.com', verify=False)
print(response.content.decode('utf-8'))
  1. 添加自定义证书:如果使用的是自签名证书,可以通过添加证书的方式来绕过SSL证书验证。可以通过cert参数指定证书路径。证书需要是PEM格式的。
import requests

response = requests.get('https://www.baidu.com', cert=('/path/client.cert', '/path/client.key'))
print(response.content.decode('utf-8'))
  1. 更新证书:如果是证书过期导致的问题,需要更新证书。可以联系证书颁发机构,申请新的证书并替换旧证书。

  2. 修改请求协议:有时候服务器不支持HTTPS协议并且不提供HTTP协议接口,可以通过协议修改的方式解决问题。可以通过requests.request()方法指定请求协议

import requests
response = requests.request('https://www.baidu.com')
print(response.content.decode('utf-8'))

通过上述解决方案,我们应该可以轻松的解决Requests报”requests.exceptions.SSLError: {ssl error message} “的问题。但是在生产环境中,我们应该谨慎使用禁用证书验证的方案,因为这样可能会存在安全风险。在实际开发中,应该尽量遵守证书验证的规范,确保数据的安全。