API ProxyLLM API代理服务 – 支持 OpenAI、Anthropic、Google、xAI 等多个 LLM 服务提供商 API Proxy

API ProxyLLM API代理服务 – 支持 OpenAI、Anthropic、Google、xAI 等多个 LLM 服务提供商 API Proxy

基于deno多模型API安全代理

代理地址源地址
https://api-proxy.me/anthropichttps://api.anthropic.com
https://api-proxy.me/cerebrashttps://api.cerebras.ai
https://api-proxy.me/coherehttps://api.cohere.ai
https://api-proxy.me/discordhttps://discord.com/api
https://api-proxy.me/fireworkshttps://api.fireworks.ai
https://api-proxy.me/geminihttps://generativelanguage.googleapis.com
https://api-proxy.me/groqhttps://api.groq.com/openai
https://api-proxy.me/huggingfacehttps://api-inference.huggingface.co
https://api-proxy.me/metahttps://www.meta.ai/api
https://api-proxy.me/novitahttps://api.novita.ai
https://api-proxy.me/nvidiahttps://integrate.api.nvidia.com
https://api-proxy.me/oaiprohttps://api.oaipro.com
https://api-proxy.me/openaihttps://api.openai.com
https://api-proxy.me/openrouterhttps://openrouter.ai/api
https://api-proxy.me/portkeyhttps://api.portkey.ai
https://api-proxy.me/rekahttps://api.reka.ai
https://api-proxy.me/telegramhttps://api.telegram.org
https://api-proxy.me/togetherhttps://api.together.xyz
https://api-proxy.me/xaihttps://api.x.ai
比如某些地区用不了OpenAI API,把https://api.openai.com 改为 https://api-proxy.me/openai 就可以用了
import { serve } from "https://deno.land/std/http/server.ts";

const apiMapping = {
  '/discord': 'https://discord.com/api',
  '/telegram': 'https://api.telegram.org',
  '/openai': 'https://api.openai.com',
  '/claude': 'https://api.anthropic.com',
  '/gemini': 'https://generativelanguage.googleapis.com',
  '/meta': 'https://www.meta.ai/api',
  '/groq': 'https://api.groq.com/openai',
  '/xai': 'https://api.x.ai',
  '/cohere': 'https://api.cohere.ai',
  '/huggingface': 'https://api-inference.huggingface.co',
  '/together': 'https://api.together.xyz',
  '/novita': 'https://api.novita.ai',
  '/portkey': 'https://api.portkey.ai',
  '/fireworks': 'https://api.fireworks.ai',
  '/openrouter': 'https://openrouter.ai/api'
};

serve(async (request) => {
  const url = new URL(request.url);
  const pathname = url.pathname;

  if (pathname === '/' || pathname === '/index.html') {
    return new Response('Service is running!', {
      status: 200,
      headers: { 'Content-Type': 'text/html' }
    });
  } 
  
  if (pathname === '/robots.txt') {
    return new Response('User-agent: *\nDisallow: /', {
      status: 200,
      headers: { 'Content-Type': 'text/plain' }
    });
  }

  const [prefix, rest] = extractPrefixAndRest(pathname, Object.keys(apiMapping));
  if (!prefix) {
    return new Response('Not Found', { status: 404 });
  }

  const targetUrl = `${apiMapping[prefix]}${rest}`;

  try {
    const headers = new Headers();
    const allowedHeaders = ['accept', 'content-type', 'authorization'];
    for (const [key, value] of request.headers.entries()) {
      if (allowedHeaders.includes(key.toLowerCase())) {
        headers.set(key, value);
      }
    }

    const response = await fetch(targetUrl, {
      method: request.method,
      headers: headers,
      body: request.body
    });

    const responseHeaders = new Headers(response.headers);
    responseHeaders.set('X-Content-Type-Options', 'nosniff');
    responseHeaders.set('X-Frame-Options', 'DENY');
    responseHeaders.set('Referrer-Policy', 'no-referrer');

    return new Response(response.body, {
      status: response.status,
      headers: responseHeaders
    });

  } catch (error) {
    console.error('Failed to fetch:', error);
    return new Response('Internal Server Error', { status: 500 });
  }
});

function extractPrefixAndRest(pathname, prefixes) {
  for (const prefix of prefixes) {
    if (pathname.startsWith(prefix)) {
      return [prefix, pathname.slice(prefix.length)];
    }
  }
  return [null, null];
}
温馨提示: 本文最后更新于2025-05-17 21:38:52,某些文章具有时效性,若有错误或已失效,请在下方 留言或联系 Macfun-A very interesting site
© 版权声明
THE END
喜欢就支持一下吧
点赞12赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情图片快捷回复

    暂无评论内容