国内如何访问 OpenAI 的 api

这个问题甚至我的一些大厂的朋友也不太清楚,所以我觉得有必备写一篇文章来简单盘盘它,希望能帮助到有需要的人

众所周知,由于大陆与 OpenAI 双方互相封锁,大陆是无法直接访问 OpenAI api 的

不过由于 GPT 4 的统治地位,国内很 AI 应用都首选 OpenAI,那么问题来了,这些应用该怎么访问 OpenAI 的 api 呢

其实主要有两种方式

1. 通过代理

大陆无法直接访问 OpenAI,那我能不能通过一种间接的方式来访问 OpenAI 呢

学习 HTTP 时我们都学过代理的概念,我们可以先把请求打到这个代理上,再由这个代理把请求转发到 OpenAI,这样就可以访问 OpenAI 了

ba29341209b50fb11c3125ab5a333c37.png

代理只是起到了一个转发流量的作用,所以除了 host 外,其他像 query,body 等与直接访问 OpenAI api 无异,这样使用者只需要把 host 替换一下(比如把 api.openai.com 换成 api.openai-proxy.com),其他请求格式不变,就可访问 OpenAI 的 api 了,很方便

当然了这个代理国内必须可以访问,比如 Cloudflare,DigitalOcean 等平台上的 server 都可以充当代理

那有人可能会问了,为了访问 OpenAI,我得额外花钱搭一个这样的代理,好像也有点不划算呢

你想到的别人也考虑好啦,目前市面上已经有一些搭建好的代理了,如 api.openai-proxy.com,你在使用的时候把 host 替换成这个,其他不变就可正常使用啦

当然了,第三方代理存在一定的安全隐患,比如虽然第三方代理号称只是转发,不保留数据,但谁知道呢,如果你的业务对安全性要求很高,估计自建代理才是最佳选择

2. 通过 vercel 等云服务平台

vercel 是全球非常知名的一个免费网站托管平台,无论是动态(如 api 服务)还是静态网站都可免费部署,而且部署非常方便,是很多开发者的首选

我们可以先把访问 OpenAI api 的服务部署在 vercel 上,但是问题来了,部署在 vercel 上的应用(通常是 xxx.vercel.app)国内也是没法访问的,那该怎么办?

这里就需要简单了解一下 HTTP 和 DNS 的原理了

假设我有一个域名叫 api.example.com,这个域名在国内是可以访问的,我想在访问这个域名时,最终经过 DNS 解析后打到的是我部署在 vercel 上的 访问 OpenAI 的 api 应用,该怎么办

实际上只要在访问 api.example.com 时解析出 vercel 平台上的 IP ,然后再通过 IP 来访问部署在 vercel 平台上的应用即可

那怎样才能在访问 api.example.com 时解析出 vercel 平台上的 IP 呢,答案是 CNAME(以下的记录值 cname.vercel-dns.net. 是我随便写的,实际上 vercel 提供了另一个正确的可被国内 DNS 解析的域名,比较敏感,不方便放,网上可找到哦)

07c49f620a8adbaaa5694d74fc49aa09.png

通过以上的记录值就可最终解析出 vercel 平台上的 IP,假设为 76.86.22.62(能解析出 IP 的原因在于 cname.vercel-dns.net. 可正常被解析,现在你知道为啥我要放这样一个随便写的值了吧,有风险)

注意这只是 vercel 平台的对外 IP,光凭 IP 是无法确定要打到哪个应用的,IP+Host 才可以哦

a14749e484ccd362443b32283406c5a0.png

所以我们要在 vercel 上的应用设置中先配置一下域名

1bab498c952c51b1bf08ae5a57b4be31.png

这样请求的时候有了 IP,有了 host:api.example.com,通过 api.example.com 访问的流量就可以转发到正确的应用上来啦

4a5d1ccc39cda707a27901e18b295289.jpeg

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

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

相关文章

C++|二叉搜索树

一、二叉搜索树的概念 二叉搜索树又称为二叉排序树,它或者是一颗空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根结…

人工智能绘图工具与设计师的未来发展

随着人工智能技术的不断进步和应用,AI绘图工具如Midjourney等在设计领域的出现引发了广泛的关注和讨论。这些工具号称可以让没有美术基础的人也能快速上手制作出漂亮的图像,给设计师们带来了一些担忧和不确定性。有人担心AI绘图工具会取代设计师的工作&a…

Obsidian 下载安装和运行

1 官网页面 2 Github 页面 3 选择合适的版本,下载后运行。 附录: 官网: https://obsidian.md/ Github 地址: https://github.com/obsidianmd/obsidian-releases/releases 参考: Markdown 官方教程 https://markdow…

2024 年 数维杯(B题)大学生数学建模挑战赛 | 生物质和煤共热解 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 CS团队倾注了大量时间和心血,深入挖掘解决方案。通…

什么是FMEA的分析范围?——FMEA软件

免费试用FMEA软件-免费版-SunFMEA FMEA的分析范围广泛而深入,涵盖了产品设计、制造过程、供应链管理以及使用和维修等多个方面。 产品设计是FMEA分析的重要一环。在设计阶段,FMEA能够帮助工程师识别潜在的设计缺陷,并预测这些缺陷可能对产品…

产品激光安全相关知识总结

平时消费产品涉及的激光安全知识讲解 文章目录 平时消费产品涉及的激光安全知识讲解一.**智能时代下的激光产品现状**1.1 手机 人脸识别用的激光1.2 智能门锁 人脸识别用的激光/人体检测用的dtof点激光1.3 扫地机 前置避障用的线激光/三角测距雷达发射的点激光/DTOF雷达发射的点…

《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第13章 网络管理

目录 前言 13.1 实验准备 13.2 创建ingress类型的网络策略 13.2.1 允许特定标签的pod能访问 <

【系统架构师】-案例篇(七)信息安全

某软件公司拟开发一套信息安全支撑平台&#xff0c;为客户的局域网业务环境提供信息安全保护。该支撑平台的主要需求如下&#xff1a; 1.为局域网业务环境提供用户身份鉴别与资源访问授权功能&#xff1b; 2.为局域网环境中交换的网络数据提供加密保护&#xff1b; 3.为服务…

SpringBoot web项目性能监控

新增两个接口&#xff1a;jmap 和 jstack&#xff0c;用于获取 Java 应用程序的内存堆转储&#xff08;heap dump&#xff09;和线程转储&#xff08;thread dump&#xff09;。 添加依赖&#xff1a; implementation("commons-io:commons-io:2.11.0") 添加control…

LeetCode刷题笔记第1480题:一维数组的动态和

LeetCode刷题笔记第1480题&#xff1a;一维数组的动态和 题目&#xff1a; 给你一个数组 nums 。数组「动态和」的计算公式为&#xff1a;runningSum[i] sum(nums[0]…nums[i]) 。 请返回 nums 的动态和。 想法&#xff1a; 想要计算数组每个位置上的动态和&#xff0c;利…

C#常用关键字 收藏集

out 作为参数修饰符&#xff0c;它允许按引用而不是按值向方法传递参数。接口和委托的泛型类型参数声明中&#xff0c;该声明指定类型参数为协变。 public void Main(){double radiusValue 3.92781;//计算圆的周长和面积&#xff0c;并将结果返回给 Main().CalculateCircumf…

git修改版本发布时间

一、场景 发现git版本发布时&#xff0c;服务器时间有误&#xff0c;需要修改。 二、解决 &#xff08;1&#xff09;准备 时间戳转换网址&#xff1a;http://shijianchuo.wiicha.com/ &#xff08;2&#xff09;SQLite 数据库 连接到安装git的服务器&#xff0c;修改版本表…

综述列表(~2024.05.10)

&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 每周末更新&#xff0c;完整版进群获取。 Q 群在群文件&#xff0c;VX 群每周末更新。

多线程-写入读取文件,使用同步逻辑

在一个进程中&#xff0c;创建一个子线程。 主线程负责:向文件中写入数据 子线程负责:从文件中读取数据 要求使用线程的同步逻辑&#xff0c;保证一定在主线程向文件中写入数据成功之后&#xff0c;子线程才开始运行&#xff0c;去读取文件中的数据 #include <stdio.h> …

Linux0.11中MINIX 文件系统

阅读linux 的源码的时候对minix 文件系统有很多的疑惑&#xff0c;根据自己的认识将这些做一个总结。 MINIX 文件系统由六个部分组成&#xff0c;分别是引导块&#xff0c;超级块&#xff0c;i结点位图&#xff0c;逻辑块位图&#xff0c;i结点&#xff0c;数据块。 引导块&am…

部署xwiki服务需要配置 hibernate.cfg.xml如何配置?

1. 定位 hibernate.cfg.xml 文件 首先&#xff0c;确保您可以在 Tomcat 的 XWiki 部署目录中找到 hibernate.cfg.xml 文件&#xff1a; cd /opt/tomcat/latest/webapps/xwiki/WEB-INF ls -l hibernate.cfg.xml如果文件存在&#xff0c;您可以继续编辑它。如果不存在&#xff…

使用GitLab自带的CI/CD功能在远程服务器部署项目(三)

前置内容&#xff1a; 通过Docker Compose部署GitLab和GitLab Runner&#xff08;一&#xff09; 使用GitLab自带的CI/CD功能在本地部署项目&#xff08;二&#xff09; 目录 一、在GitLab服务器上生成私钥与公钥 二、将公钥拷贝到应用服务器上 三、将私钥给到Docker Exec…

深入解析Java中Set接口

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

静态工厂模式

静态工厂类替代构造方法 Boolean bBoolean.valueOf(true); 名字易于理解&#xff1b; 可以实现多态&#xff1b; 可以共享对象&#xff1b; jdbc的获得连接的操作也是静态工厂类&#xff0c;将实现交给了具体的数据库&#xff0c;解耦 DriverManager.getConnection(url,user,p…

Java面试题:描述一下Java中的堆内存是如何划分的,并解释每个区域的作用

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;堆内存是用于存储对象实例的区域&#xff0c;它在JVM启动时被创建。堆内存的划分方式和每个区域的作用如下&#xff1a; 年轻代&#xff08;Young Generation&#xff09;&#xff1a; Eden区&#xff1a;大多数对象首先…