You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现OpenAI ChatGPT接口持续返回HTTP 429错误求助

解决OpenAI API HTTP 429错误的方案

1. 修正API URL格式错误

你的代码里API_URL包含了多余的<>符号,这会导致请求地址无效,直接触发异常:

// 错误写法
const API_URL = "<https://api.openai.com/v1/chat/completions>";
// 正确写法
const API_URL = "https://api.openai.com/v1/chat/completions";

2. 处理前端跨域限制

前端直接在浏览器中调用OpenAI API会触发CORS跨域限制,OpenAI官方不允许前端直接发起请求(API_KEY暴露在前端代码中也存在严重安全风险)。

解决办法是通过后端代理转发请求,以下是Node.js + Express的代理示例:

// 后端代理代码
const express = require('express');
const fetch = require('node-fetch');
const app = express();
const PORT = 3000;

app.use(express.json());

app.post('/api/chat', async (req, res) => {
  try {
    const response = await fetch('https://api.openai.com/v1/chat/completions', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`
      },
      body: JSON.stringify(req.body)
    });
    const data = await response.json();
    res.json(data);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

app.listen(PORT, () => console.log(`Proxy running on port ${PORT}`));

前端修改请求地址为代理接口:

const API_URL = "http://localhost:3000/api/chat";

3. 验证API_KEY有效性

  • 检查API_KEY是否完整复制,无多余空格或换行符
  • 确认账号状态正常,API_KEY未被封禁
  • 确保API_KEY拥有gpt-3.5-turbo模型的调用权限

4. 排查IP访问限制

若你的IP被OpenAI风控系统标记(如所在地区不在服务覆盖范围、近期有异常请求行为),也会触发429错误:

  • 切换合规的网络环境尝试请求
  • 更换网络(如切换WiFi或移动数据)

5. 添加请求重试机制

短时间内的高频请求可能触发服务器限流,可添加简单重试逻辑:

const generate = async (retries = 3) => {
  try {
    const response = await fetch(API_URL, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: `Bearer ${API_KEY}`,
      },
      body: JSON.stringify({
        model: "gpt-3.5-turbo",
        messages: [{ role: "user", content: promptInput.value }],
      }),
    });

    if (response.status === 429 && retries > 0) {
      await new Promise(resolve => setTimeout(resolve, 1000));
      return generate(retries - 1);
    }

    if (!response.ok) {
      throw new Error(`API请求失败: ${response.status}`);
    }

    const data = await response.json();
    resultText.innerText = data.choices[0].message.content;
  } catch (error) {
    console.error("Error:", error);
    resultText.innerText = "Error occurred while generating.";
  }
};

内容的提问来源于stack exchange,提问作者steve landiss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:22:16