有些小伙伴想用chatgpt的api在国内搭建服务,但是国内的环境不支持api的访问,甚至可能还会被官方封号,闲逛GitHub的时候发现了大佬给出的国内使用api的办法,用cloudflare的workers来中转chatgpt官方的api,使用了一段时间还不错。
但是后来workers的域名被GFW墙掉了,好在workers可以自定义域名,可以使用自己托管在cloudflare里,并且没有被墙的域名。
步骤如下:
- 新建一个 Cloudflare Worker
- 复制 cf_worker.js 里的代码粘贴到 Worker 中并部署
- 给 Worker 绑定一个没有被 GFW 墙的域名
- 使用自己的域名代替 api.openai.com
首先要求有cloudflare账号并且托管了域名在里面,没有cloudflare账号可以注册,是免费的,域名也可以找个免费的,然后托管在cloudflare里。
登录你的cloudflare,如果英文看不懂cloudflare可以切换为中文,在页面左边侧边栏里找到workers,点进去,然后点击创建服务
根据你的喜好随便输入一个名称,然后直接点击创建服务
创建好服务后来到下一个界面,点击右上角快速编辑
点进去之后删掉左边框里的代码
然后复制大佬给出的代码:
const TELEGRAPH_URL = ‘https://api.openai.com’;
addEventListener(‘fetch’, event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url);
const headers_Origin = request.headers.get(“Access-Control-Allow-Origin”) || “*”
url.host = TELEGRAPH_URL.replace(/^https?:\/\//, ”);
const modifiedRequest = new Request(url.toString(), {
headers: request.headers,
method: request.method,
body: request.body,
redirect: ‘follow’
});
const response = await fetch(modifiedRequest);
const modifiedResponse = new Response(response.body, response);
// 添加允许跨域访问的响应头
modifiedResponse.headers.set(‘Access-Control-Allow-Origin’, headers_Origin);
return modifiedResponse;
}
粘贴进去,然后保存部署
弹出确认框,继续保存部署,现在域名都已经可以使用了,但是想在国内使用还是不行,因为GFW墙掉了workers.dev的域名,不过没关系,可以绑定自己的域名。
回到刚刚创建的服务,找到触发器,点击进去,在里面找到自定义域,输入你在cloudflare托管的域名,这里输入的域名没有解析到IP也行,但也不能是被GFW墙掉的域名,输入完成点击添加自定义域,成功后过一会就能使用你自己的域名来替换openAI的api地址了,就可以把https://api.openai.com替换为https://你的域名。但是这个方法中的cloudflare workers每天只有10万次的请求额度,个人轻度使用还是没问题的,建议不要轻易透露给他人。
文章参考自GitHub: chatgptProxyAPI和 noobnooc