调用OpenAI库openai.APIConnectionError: Connection error.或SSL证书验证失败,怎么关闭或跳过SSL证书验证?

 前言

在使用网络请求库时,有时会遇到连接错误的问题,其中几种可能的原因是SSL证书问题、网络代理问题等。

1. 主要问题与报错信息

1.1 主要问题

遇到SSL证书的问题时,如果是直接使用requests发送请求还能直接设置 verify=False 来禁用SSL证书验证(注:禁用SSL证书可能不安全),但如果是使用类似OpenAI这种封装过的网络请求库应该怎么禁用SSL证书验证呢?

1.2 报错信息

主要报错的问题是:httpx.ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)

只要是和SSL相关的报错都可以尝试一下这个思路,当前报错的原因是本地没有SSL证书

2. 解决办法

2.1 SSL证书问题

虽然封装的网络请求库无法直接在requests请求方法上设置 verify=False 参数,但是一般封装的网络请求库都提供了设置请求客户端的参数,比如OpenAI库的OpenAI Client实例化方法中有一个http_client参数,通过指定请求客户端并在客户端的实例化方法中传入 verify=False 就可以同样禁用SSL证书验证,示例代码如下:

import httpx
from openai import OpenAI

client = OpenAI(
    base_url="https://xxxx.api-forwards.com/v1",
    api_key="Your OpenAI API Key",
    http_client=httpx.Client(verify=False)
)

 解决问题的关键就是

http_client=httpx.Client(verify=False)

如果不是OpenAI库也可以参照这个思路,查阅相关的文档找到设置请求客户端的参数并传入禁用SSL证书验证的客户端 

2.2 网络代理问题

如果API需要代理才能访问,则要指定HTTP和HTTPS请求的代理服务器,如下代码:

os.environ["http_proxy"] = "http://localhost:代理端口"
os.environ["https_proxy"] = "http://localhost:代理端口"

 代理端口一般为7890或7897,可自行在代理软件内查看或逐个尝试

3. 其他问题

正如前面所提到的,一般封装的网络请求库都提供了设置请求客户端(代理)的参数。就算同是OpenAI库的Python版本和Node.js版本的参数也不太一样。这里提供一种解决问题的思路!

3.1 Node.js版本解决方法

鉴于有的小伙伴可能已经被这个魂牵梦绕的问题困扰了一整天甚至几天,先直接摆出代码来提提神!

JavaScript / CommonJS 版本

const https = require('https');
const OpenAI = require('openai');

const agent = new https.Agent({
    rejectUnauthorized: false
});

const openai = new OpenAI({
	baseURL: 'https://xxxx.api-forwards.com/v1',
	apiKey: 'Your OpenAI API Key',
	httpAgent: agent
});

 TypeScript / ESModule 版本

import https from "https";
import OpenAI from 'openai';

const agent = new https.Agent({
    rejectUnauthorized: false
});

const openai = new OpenAI({
    baseURL: 'https://xxxx.api-forwards.com/v1',
    apiKey: 'Your OpenAI API Key',
    httpAgent: agent
});

注意提前安装相关依赖,https库是Node.js自带的,无需专门安装

baseURL是指定的API请求地址,需要替换为自己的,使用OpenAI官方的则不传入

3.2 解决问题思路

博主博主你的文章确实很好,但还是解决不了我的问题,有没有更加简单又强大的解决方法?

有的兄弟,有的!

授人以鱼不如授人以渔,这里提供一种解决这种类型问题的通法,也是我实践过几次的方法

3.2.1 提取关键信息

无论是使用搜索引擎还是大语言模型,搜索什么问什么是第一个问题,这就涉及到信息提取和抽象的能力,上面的问题最直接的信息就是几个报错信息:

1. openai.apiconnectionerror: connection error.

2. httpx.ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

这时候有一定的英语基础或者把报错拿去百度一搜就知道,这是在“SSL证书验证失败”的错误,我们就得到了核心的报错信息

3.2.2 擅用搜索引擎

知道搜什么了之后就可以去带着问题找答案了,直接百度搜索“openai.apiconnectionerror: connection error.” 

出来四五篇文章,看完了,试过了,没用。。

再直接百度搜索“httpx.ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate”

只出来两篇文章,看完了,没用。。

再再百度搜索“OpenAI库怎么关闭SSL证书验证”

终于!找到解决方法了!也就是下面的参考文章中的内容。但是问题又来了,我是用serverless技术的云对象去调用OpenAI库,是Node.js库,代码一写天塌了,参数不一样,一眼也看不到类似功能的参数

再再再百度搜索“nodejs openai 关闭SSL证书验证”,您猜怎么着?

搜到我自己的文章了...哈哈哈哈哈开玩笑的,没有一篇相关的内容

这时候就有人问了,博主博主你都走投无路了,还有什么办法挣一下吗?

有的兄弟,有的!包挣的。

3.2.3 擅用人工智能

都到这一步了,搜索引擎已经不能满足我了,我反手就把问题甩给ChatGPT,他给我了一个办法,有效但不完全有效

 对比我上面给出的代码就会发现ChatGPT给出的代码是有错误的,可能和相关依赖的版本问题有关,在最新版的OpenAI库上不能正常运行。但是!他给出的httpsAgent的代码居然没问题!而且能达到我想要的效果!

3.2.4 总结

如果你看到这里了,那么恭喜你看完了一大半废话[/doge],其实我想说的就是用 AI 可以很方便的解决问题哈哈哈哈哈。但是前面提到的一个能力确实非常非常重要——抽象能力,没错,就是抽象[/doge]

参考文章

### 配置全局代理以解决 `openai.APIConnectionError` 连接错误 当遇到类似于 `Max retries exceeded with url` 的连接错误时,这通常意味着客户端无法成功建立到目标服务器的网络连接[^1]。对于使用 OpenAI API 的情况,可以通过设置全局 HTTP/HTTPS 代理来尝试解决问题。 #### 设置环境变量配置代理 大多数编程语言和操作系统允许通过环境变量来指定代理服务器地址。以下是针对不同操作系统的具体方法: ##### Windows 系统 打开命令提示符 PowerShell 并输入如下指令: ```powershell $env:HTTP_PROXY="http://your.proxy.server:port" $env:HTTPS_PROXY="https://your.proxy.server:port" ``` 为了使这些更改永久生效,可以将上述语句添加至用户的 Powershell 配置文件中,路径通常是 `$PROFILE` 文件。 ##### macOS 和 Linux 系统 在终端里执行下面的 shell 命令: ```bash export http_proxy=http://your.proxy.server:port export https_proxy=https://your.proxy.server:port ``` 要让此设置持久化保存,在 `.bashrc`, `.zshrc` 者其他相应的 Shell 初始化脚本的最后一行加入上面两行代码即可。 #### Python 中直接设定请求会话级别的代理参数 如果仅希望影响特定应用程序而不是整个系统,则可以在程序内部显式定义代理选项。例如,在 Python 脚本中调用 OpenAI API 之前这样做: ```python import os os.environ['HTTP_PROXY'] = 'http://your.proxy.server:port' os.environ['HTTPS_PROXY'] = 'https://your.proxy.server:port' # 接下来初始化并使用 openai 客户端... ``` 以上措施应该能够帮助缓解由于本地网络状况不佳而导致的服务不可达问题。不过需要注意的是,选择合适的代理服务提供商非常重要;不稳定的中间节点可能会引入额外延迟甚至安全风险。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值