标签:Python、SSL、monkey-patch、httpx、aiohttp、requests、OpenAI


1 为什么会有这篇文章?

在本地调试 OpenAI 代理、数据抓取、私有服务、访问外网 时,经常会碰到如下报错:

SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/models (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1017)')))
File ".venv\lib\site-packages\httpx\_transports\default.py", line 118, in map_httpcore_exceptions|     raise mapped_exc(message) from exc| httpx.ConnectError: All connection attempts failed
An error occurred: Expecting value: line 1 column 1 (char 0)
An error occurred during the request: HTTPSConnectionPool(host='en.wikipedia.org', port=443): Max retries exceeded with url: /w/api.php?list=search&srprop=&srlimit=1&limit=1&srsearch=langchain&format=json&action=query (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1000)'))))
 File ".venv\lib\site-packages\requests\adapters.py", line 698, in sendraise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='r.jina.ai', port=443): Max retries exceeded with url: /https://baijiahao.baidu.com (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:997)')))

为了快速定位 “是不是证书问题” 而不是“逻辑问题”,我们需要临时零侵入地把所有 HTTP 客户端的 SSL 校验关掉。
把下面这段脚本调用后就能跑,调试结束直接删除,零副作用
或者为了临时绕过所有SSL证书验证,使代码逻辑跑通。


2 完整代码(复制即用)

def monkey_patch():"""通过关闭 SSL/TLS 证书验证,解决 ssl 验证引发的 443 超时问题(注:临时调试使用,生产务必移除)"""import functools# 1) 全局标准库 SSL 上下文try:import ssl# 全局取消证书验证ssl._create_default_https_context = ssl._create_unverified_contextexcept Exception:pass# 2) httpx 同步 & 异步try:import httpxhttpx.Client.__init__ = functools.partialmethod(httpx.Client.__init__, verify=False)httpx.AsyncClient.__init__ = functools.partialmethod(httpx.AsyncClient.__init__, verify=False)except Exception:pass# 3) OpenAI 私有 AsyncHttpxClientWrappertry:import openai._base_client as bc_old = bc.AsyncHttpxClientWrapper.__init__def _new_init(self, *a, **k):k.setdefault("verify", False)return _old(self, *a, **k)bc.AsyncHttpxClientWrapper.__init__ = _new_initexcept Exception:pass# 4) aiohttptry:import aiohttpaiohttp.TCPConnector.__init__ = functools.partialmethod(aiohttp.TCPConnector.__init__, verify_ssl=False)except Exception:pass# 5) requeststry:import requestsfrom functools import wraps# 5-1) 修改 Session 实例默认属性_orig_init = requests.Session.__init__@wraps(_orig_init)def _patched_init(self):_orig_init(self)self.verify = Falserequests.Session.__init__ = _patched_init# 5-2) 快捷函数补丁: 防止它们内部 new Session 时传 verifyfor name in ("get", "post", "put", "patch", "delete", "head", "options"):_orig = getattr(requests, name)setattr(requests,name,(lambda _o: lambda *a, **k: _o(*a, **dict(k, verify=False)))(_orig),)except Exception:pass

使用:

# 在业务逻辑最顶部调用即可
monkey_patch()

3 逐段技巧拆解

位置技巧一句话解释
ssl._create_default_https_context = ...全局钩子把标准库 HTTPS 默认上下文换成“不校验”。
functools.partialmethod一行改默认参数不继承、不派生,直接把类方法的形参默认值改掉。
setdefault("verify", False)不覆盖显式传参只在用户没传时兜底,传了 True 仍然生效。
@wraps栈信息不丢失调试时能看到原函数名,而不是 <lambda>
except Exception:不吞系统信号保留 KeyboardInterruptSystemExit,脚本可 Ctrl-C。

4 何时删除?

场景建议
单测/本地调试保留
代码评审 / 上线必须删除
CI / Docker用环境变量 SSL_NO_VERIFY=1 控制开关,而非硬编码

5 延伸阅读

  • Python 官方文档:ssl.create_default_context
  • httpx 文档:verify
  • requests 文档:Session.verify

一句话总结
通过侵入式修改,关掉全部 SSL 校验;调试完删掉,干净不留痕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91078.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91078.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91078.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMWARE -ESXI-ntp时间同步无法启动异常处理

从服务界面查看NTP服务是停止的&#xff08;手动启动无效&#xff09;尝试到系统-时间设置-添加服务-网络时间协议&#xff0c;添加阿里云NTP服务器&#xff08;网络可达&#xff09; ntp.aliyun.com 点击确定报错-无法更改主机配置出现上面的情况多半是DNS没有设置ssh登录到服…

yolo11分类一键训练工具免安装环境windows版使用教程

这个是windows上用于yolo11分类训练工具&#xff0c;不需要写代码只需要按照要求摆放好分类图片文件夹就可以训练。软件内置cuda和python模块&#xff0c;因此不需要安装python环境和cuda就可以使用。注意需要电脑配备有nvidia显卡才能使用。要求显存>4GB。首先我们打开软件…

2025年-ClickHouse 高性能实时分析数据库(大纲版)

告别等待&#xff0c;秒级响应&#xff01;这不只是教程&#xff0c;这是你驾驭PB级数据的超能力&#xff01;我的ClickHouse视频课&#xff0c;凝练十年实战精华&#xff0c;从入门到精通&#xff0c;从单机到集群。点开它&#xff0c;让数据处理速度快到飞起&#xff0c;让你…

深入理解 Scikit-learn:机器学习实战的科学之道与避坑指南

掌握工具易&#xff0c;领悟其道难——本文带你穿透API表面&#xff0c;直击工业级机器学习实践的核心逻辑。作为一名长期耕耘在机器学习研究与工业应用一线的从业者&#xff0c;我见过太多因误用 sklearn 而导致的模型失效案例。从数据泄露到评估失真&#xff0c;从特征处理失…

Android 调试桥 (adb) 基础知识点

Android 调试桥 (adb) 是一种功能多样的命令行工具&#xff0c;可让您与安卓手机进行通信。常用于辅助测试开发或定位问题。 一、adb的工作原理 &#x1f31f; 启动服务器进程&#xff1a;检查是否adb服务器进程正在运行&#xff0c;若没有则启动。 启动或关闭adb服务&#xff…

AW2013 LED驱动芯片 工作方式介绍

根据您上传的 AW2013 芯片手册&#xff0c;我将为您分三个部分详细解读&#xff1a;一、芯片简介&#xff08;AW2013 概述&#xff09; AW2013 是一款 3 通道的 IC 控制恒流 LED 驱动芯片&#xff0c;支持以下功能&#xff1a;单通道最大恒流输出&#xff1a;15mA&#xff0c;支…

node.js中的fs与path模块

前言 什么是Node.js&#xff1f; Node.js 是一个开源和跨平台的 JavaScript 运行时环境 Node.js 在浏览器之外运行 V8 JavaScript 引擎&#xff0c;即 Google Chrome 的核心。一、fs模块基础 1. 引入fs模块 const fs require(fs);2. 同步与异步方法 fs模块提供了同步和异步两种…

C# 静态类_静态方法_静态字段(static 声明静态的关键字 )

静态类里面的所有成员都必须得是静态的&#xff0c;是不能被实例化的(不能用对象调用)&#xff0c;不能在静态类中声明实例&#xff08;非静态&#xff09;字段 属性 方法 静态方法中也只能访问静态字段&#xff0c; 普通方法中不管数据是不是静态都能使用1、定义一个静态类 //…

MRDIMM对服务器总体拥有成本(TCO)影响的系统性分析

以下是针对MRDIMM对服务器总体拥有成本&#xff08;TCO&#xff09;影响的系统性分析&#xff0c;结合技术特性与经济性指标&#xff1a;一、MRDIMM降低TCO的核心机制带宽效率提升 MRDIMM通过数据缓冲器实现双Rank并行传输&#xff0c;单次数据传输量从标准RDIMM的64字节提升至…

c# openxml 打开加密 的word读取内容

using System; using System.IO; using System.Linq; using System.Text; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing;/// <summary> /// 使用OpenXML获取文档内容&#xff0c;替代Aspose方式…

【SpringAI实战】ChatPDF实现RAG知识库

一、前言 二、实现效果 三、代码实现 3.1 后端代码 3.2 前端代码 一、前言 Spring AI详解&#xff1a;【Spring AI详解】开启Java生态的智能应用开发新时代(附不同功能的Spring AI实战项目)-CSDN博客 二、实现效果 实现一个非常火爆的个人知识库AI应用&#xff0c;ChatPDF…

Qt小组件 - 8 图片浏览器

一个自制的图片浏览器&#xff0c;如果不想安装qfluentwidgets&#xff0c; CommandBarView可以使用QWidgetQPushButton替代安装 qfluentwidgets pip install PySide6-Fluent-Widgets[full]代码示例 # coding: utf-8 from typing import Unionfrom PySide6.QtCore import Qt, Q…

R study notes[1]

文章目录introducing to Rreferencesintroducing to R R is an integrated suite involved data handling,storage facility,calculations on arrays,tools for data analysis and so on.running the command R in the terminal of OS can start R software.in R terminal ,to…

由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程

由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程 在上一篇文章中&#xff0c;由于 Oracle 数据库的归档日志空间耗尽导致客户端无法连接数据库。在解决的过程中临时修改了归档路径。后来通过修改参数db_recovery_file_dest_size的值解决了问题。 但该操作导致DG无…

密码学与加密货币:构建去中心化信任的技术基石与未来挑战

密码学是加密货币的技术基石&#xff0c;两者通过数学原理构建去中心化信任体系。以下从技术原理、应用场景及未来挑战三方面展开分析&#xff1a;一、密码学基础&#xff1a;加密货币的安全基石非对称加密体系公钥与私钥&#xff1a;基于椭圆曲线密码学&#xff08;ECC&#x…

用于 Web 认证的 抗量子签名——ML-DSA 草案

1. 引言 本文描述了在 Web Authentication (WebAuthn) 中实现无密码认证&#xff08;Passwordless authentication&#xff09;的方法&#xff0c;该方法使用模块格&#xff08;Module-Lattice&#xff09;为基础的数字签名标准&#xff08;ML-DSA&#xff09;&#xff0c;即 …

ubuntu18.04解压大的tar.gz文件失败

1. 问题描述 我在vmware的虚拟机装有petalinux环境&#xff0c;需要解压downloads_2020.2.tar.gz这个大的压缩包文件&#xff0c;但是总是失败&#xff0c;而且过程很漫长 tar: downloads/git2/github.com.vim.vim.git/objects/pack/pack-f7f2e2add0c8972a9141b557ef725c38069…

App拉起:唤醒即达,告别繁琐操作

在移动互联网进入存量竞争的今天&#xff0c;“让用户少点一次、少等一秒”往往意味着20%以上的转化率差异。openinstall把这套体验总结成一套可落地的App拉起方案&#xff1a;一套SDK一组链接跳转规则一个可自定义的落地页&#xff0c;就能把Web→App的整条动线缩成一次点击。…

开发指南125-HTML DOM事件

1、onload和onunload在页面或某个元素加载完成后或离开后触发事件。2、onchange用于在元素的值发生变化时触发事件。一般用于<input>, <select>, <textarea>等元素3、onfocus 和 onblur激活或失去焦点时触发4、onmouseover 和 onmouseout鼠标移入或移除时触发…

使用redis 作为消息队列时, 如何保证消息的可靠性

使用Redis作为消息队列时&#xff0c;如何保证消息的可靠性 在分布式系统中&#xff0c;消息队列扮演着不可或缺的角色&#xff0c;它能够有效地实现服务间的解耦和异步通信。Redis凭借其出色的性能&#xff0c;常常被用作轻量级的消息队列。然而&#xff0c;Redis本质上是一个…