调用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]

参考文章

引用\[1\]、\[2\]和\[3\]中提到的错误信息都是关于SSL连接的异常。这些异常表明在建立使用SSL连接时出现了问题,导致连接被关闭重置。具体来说,"Connection reset by peer"表示连接的对端重置了连接,"socket write error"表示在写入数据时发生了错误。这些异常可能是由于网络问题、服务器配置问题SSL证书问题引起的。 对于问题中提到的"WebSocket I/O error: Connection has been shutdown:javax.net.ssl.Exception:java.net.SocketException:Connection reset"错误,它表明在WebSocket通信中发生了SSL连接的异常,导致连接被关闭。这可能是由于服务器客户端的SSL配置问题、网络问题其他原因引起的。 要解决这个问题,可以尝试以下几个步骤: 1. 检查服务器和客户端的SSL配置,确保它们之间的协议、加密算法和证书设置是一致的。 2. 检查网络连接,确保网络稳定,并且没有防火墙代理服务器阻止了SSL连接。 3. 检查SSL证书是否有效,是否过期被吊销。如果有问题,可以尝试更新证书使用有效的证书。 4. 如果问题仍然存在,可以尝试使用其他工具进行SSL连接,以确定是否是特定框架的问题。 总之,WebSocket I/O error: Connection has been shutdown:javax.net.ssl.Exception:java.net.SocketException:Connection reset错误表明在WebSocket通信中发生了SSL连接异常,可能是由于SSL配置、网络问题证书问题引起的。通过检查和调整相关配置,可以尝试解决这个问题。 #### 引用[.reference_title] - *1* *2* *3* [Java中调用https接口上传文件出错了Connection has been shutdown?](https://blog.csdn.net/weixin_39738115/article/details/114192435)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值