Python发送请求SSL验证设置的几种方案

 更新时间:2025年09月14日 11:25:00   作者:detayun  
这篇文章主要介绍了Python请求SSL/TLS握手失败的常见原因及五种解决方案,包括禁用验证、指定TLS版本、添加重试、更新证书库与系统时间、排查防火墙,建议优先检查网络和证书问题,生产环境慎用禁用验证,需要的朋友可以参考下

这个错误通常是由于SSL/TLS握手失败导致的,可能原因包括证书验证问题、不兼容的加密协议或网络连接中断。以下是几种解决方案,按推荐顺序排列:

方案一:临时禁用SSL验证(快速测试)

response = requests.get(url=url, headers=header, verify=False)

注意:生产环境不推荐长期禁用验证,存在安全风险

方案二:指定TLS版本(推荐)

response = requests.get(
    url=url,
    headers=header,
    ssl_version='TLSv1_2'  # 显式指定TLS 1.2版本
)

方案三:添加重试机制

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

session = requests.Session()
retry = Retry(total=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('https://', adapter)

response = session.get(url=url, headers=header)

方案四:检查本地环境

  1. 更新证书库:运行pip install --upgrade certifi
  2. 检查系统时间:确保系统时间准确
  3. 防火墙排查:临时禁用防火墙/安全软件测试

方案五:完整改进代码

import os
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

url = 'https://www.hainan.gov.cn/.../files/eae7d9e018bf468794e87e690eef3a95.zip'

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
    "Accept": "*/*",
}

# 创建带重试的Session
session = requests.Session()
retry = Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504])
adapter = HTTPAdapter(max_retries=retry)
session.mount("https://", adapter)

try:
    # 添加超时参数
    response = session.get(url, headers=headers, timeout=10, verify=True)
    response.raise_for_status()
    
    # 确保目录存在
    os.makedirs('test_file', exist_ok=True)
    
    with open('test_file/test2.zip', 'wb') as f:
        f.write(response.content)
        
except requests.exceptions.RequestException as e:
    print(f"请求失败: {type(e).__name__}: {e}")
except Exception as e:
    print(f"其他错误: {e}")

补充建议:

  1. 先在浏览器测试:手动访问该URL确认是否可下载
  2. 检查文件路径:确保test_file目录存在
  3. 尝试简单请求:先用curl或Postman测试基本连接性
  4. 更新依赖库pip install --upgrade requests urllib3

如果问题持续存在,可能是服务器端配置问题(如仅支持特定TLS版本),建议联系网站管理员确认支持的加密协议。

到此这篇关于Python发送请求SSL验证设置的几种方案的文章就介绍到这了,更多相关Python SSL验证设置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用python的pandas为你的股票绘制趋势图

    使用python的pandas为你的股票绘制趋势图

    这篇文章主要介绍了通过python为你的股票绘制趋势图,动手写个小程序, 把股票趋势每天早上发到邮箱里,用 python 的 pandas, matplotlib 写起来很容易, 几十行代码搞定。,需要的朋友可以参考下
    2019-06-06
  • Django ORM 多表查询示例代码

    Django ORM 多表查询示例代码

    这篇文章主要介绍了Django ORM 多表查询,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • python设置环境变量的几种方法总结

    python设置环境变量的几种方法总结

    这篇文章主要介绍了在Python中设置环境变量可以通过多种方式实现,包括使用os.environ、os.putenv、setuptools以及在操作系统级别设置,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • Python 如何展开嵌套的序列

    Python 如何展开嵌套的序列

    这篇文章主要介绍了Python 如何展开嵌套的序列,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】

    python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】

    这篇文章主要介绍了python matplotlib模块基本图形绘制方法,结合实例形式总结分析了Python使用matplotlib模块绘制直线,曲线,直方图,饼图等图形的相关操作技巧,需要的朋友可以参考下
    2020-04-04
  • 如何利用Python获取文本中的电话号码实例代码

    如何利用Python获取文本中的电话号码实例代码

    Python的文本处理是经常碰到的一个问题,下面这篇文章主要给大家介绍了关于如何利用Python获取文本中的电话号码的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • python本地文件服务器实例教程

    python本地文件服务器实例教程

    这篇文章主要给大家介绍了关于python本地文件服务器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Pycharm报错:'NoneType' object has no attribute 'bytes'的解决方法

    Pycharm报错:'NoneType' object has no attribute 

    这篇文章主要给大家介绍了关于Pycharm报错:'NoneType' object has no attribute 'bytes'的解决方法,文中通过图文将解决的方法介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Python代码实现粒子群算法图文详解

    Python代码实现粒子群算法图文详解

    这篇文章主要介绍了Python编程实现粒子群算法详解,涉及粒子群算法的原理,过程,以及实现代码示例,具有一定参考价值,需要的朋友可以了解下
    2021-08-08
  • Python绘制K线图之可视化神器pyecharts的使用

    Python绘制K线图之可视化神器pyecharts的使用

    这篇文章主要介绍了Python绘制K线图之可视化神器pyecharts的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论