cloudflare的worker功能可以用与转发一些API的调用需求,通过这个功能可以实现使用自己的域名转发调用某些API的需求。 这里分享两个worker.js代码,一个可以实现将APIKey进行自定义变换后转发,另一个可以自定义一些关键词或者敏感词汇,然后再调用Openai API的过程中拦截含有屏蔽词的调用请求。
自定义Key转发
这里的代码中,在openai-api处填写官方api,前面填写自定义字符串即可设定不一样的api实现转发调用。如果不设置任何自定义api,也可以直接使用官方apikey进行调用。
const OPENAI_URL = 'https://api.openai.com';
const keyMap = {
'自定义api名1': 'openai-api1',
'自定义api名2': 'openai-api2',
// ...更多映射关系...
};
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url);
url.host = OPENAI_URL.replace(/^https?:\/\//, '');
const modifiedRequest = new Request(url.toString(), {
headers: new Headers(request.headers),
method: request.method,
body: request.body,
redirect: 'follow'
});
const authHeader = modifiedRequest.headers.get('Authorization');
if (authHeader) {
for (const customKey in keyMap) {
if (authHeader.includes(customKey)) {
modifiedRequest.headers.set('Authorization', authHeader.replace(customKey, keyMap[customKey]));
break;
}
}
}
const response = await fetch(modifiedRequest);
const modifiedResponse = new Response(response.body, response);
// 添加允许跨域访问的响应头
modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');
return modifiedResponse;
}
关键词屏蔽版本
该版本的可以设定无限个关键词,自定义设置,然后当请求调用是出现了这些关键词,会直接返回拒绝调用的消息,不消耗Toekn。
const OPENAI_URL = 'https://api.openai.com';
// 将敏感词汇放在一个数组中
const sensitiveWords = ['关键词1', '关键词2', '更多关键词'];
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
const url = new URL(request.url);
url.host = OPENAI_URL.replace(/^https?:\/\//, '');
const requestBody = await request.clone().text();
// 检查请求体中是否包含屏蔽词
if (sensitiveWords.some(word => requestBody.includes(word))) {
return new Response('请求包含敏感信息,终止会话。', { status: 400 });
}
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', '*');
return modifiedResponse;
}
Github地址:cloudflare-transfer-api