Error from OpenAI: Error: Network Error: Failed to fetch (api.openai.com)

2026年05月17日 22:56 30.58 秒 success

错误信息

API Error: Error from OpenAI: Error: Network Error: Failed to fetch (api.openai.com)

AI 解决方案

🌐 错误翻译


原文:Error from OpenAI: Error: Network Error: Failed to fetch (api.openai.com)
译文:来自OpenAI的错误:网络错误:获取失败 (api.openai.com)

🎯 原因分析


  • 根本原因:您的应用程序在尝试向 api.openai.com 发起HTTP请求时,在网络层面失败了。这通常意味着无法建立到目标服务器的连接。

  • 具体分析Failed to fetch 是浏览器或Node.js中 fetch API抛出的通用网络错误。它可能由以下原因导致:

  • OpenAI服务临时中断或维护
    本地网络问题:您的互联网连接断开或不稳定。
    网络配置/防火墙问题:本地防火墙、公司网络策略或代理设置阻止了与 api.openai.com 的通信。
    DNS解析失败:无法将域名 api.openai.com 解析为正确的IP地址。

    💡 解决方案


    1. 首先检查OpenAI服务状态
    访问 OpenAI 官方状态页面:https://status.openai.com/,确认其API服务是否正常运行。这是排除服务端问题的最快方法。

    2. 检查本地网络
    确认您的设备可以正常访问其他网站(如 google.com)。
    尝试使用 pingcurl 命令测试连通性:

        # 测试域名解析和基本连接(Windows/Linux/macOS 终端)
        ping api.openai.com
    
        # 尝试发起一个简单的HTTP请求(需要curl)
        curl -I https://api.openai.com
        

    如果 ping 不通或 curl 超时,则问题在您的本地网络或ISP。

    3. 代理或防火墙设置
    检查代理:如果您的网络环境需要代理,请确保在代码或运行环境中正确配置了 HTTP_PROXYHTTPS_PROXY 环境变量。
    检查防火墙:暂时禁用本地防火墙或杀毒软件进行测试,确保它们没有阻止出站连接。

    4. 代码中添加重试逻辑(作为临时缓解措施)
    网络瞬时故障很常见,为请求添加重试机制可以提高健壮性。

    // 使用async/await和基本重试的示例
    async function callOpenAIWithRetry(apiKey, payload, retries = 3) {
        for (let i = 0; i < retries; i++) {
            try {
                const response = await fetch('https://api.openai.com/v1/chat/completions', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                        'Authorization': `Bearer ${apiKey}`
                    },
                    body: JSON.stringify(payload)
                });
                if (!response.ok) {
                    throw new Error(`HTTP error! status: ${response.status}`);
                }
                return await response.json();
            } catch (error) {
                if (error.message.includes('Failed to fetch') && i < retries - 1) {
                    console.log(`请求失败,正在重试... (${i + 1}/${retries})`);
                    await new Promise(res => setTimeout(res, 1000 * (i + 1))); // 指数退避等待
                } else {
                    throw error; // 重试次数用尽或非网络错误,抛出
                }
            }
        }
    }
    
    // 调用示例
    callOpenAIWithRetry('your-api-key', {model: 'gpt-3.5-turbo', messages: [{role: 'user', content: 'Hello'}]})
        .then(console.log)
        .catch(console.error);
    

    🛡️ 预防措施


  • 实现健壮的错误处理与重试机制:对于关键的网络请求,务必像上面示例一样,添加重试逻辑、超时设置和详细的错误捕获,以应对网络波动。

  • 使用诊断工具监控:在生产环境中,可以考虑使用类似 curlpostman 的监控脚本定期测试API端点的可达性,或使用APM(应用性能监控)工具来追踪网络错误率。