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
相关产品推荐
相关产品推荐

