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

使用JavaScript fetch调用Gemini API OpenAI兼容接口时出现400 INVALID_ARGUMENT错误

使用JavaScript fetch调用Gemini API OpenAI兼容接口时出现400 INVALID_ARGUMENT错误

看起来问题出在请求体的序列化方式上!你的curl请求能正常工作是因为它发送的是格式完全合规的JSON,但你用Bruno生成的JavaScript代码里,手动拼接了JSON字符串,这很容易埋下隐藏的格式错误,导致API无法正确解析你的请求。

问题根源

你当前代码里的body是手动拼接的转义字符串:

body: '{\"model\":\"gemini-1.5-flash\",\"messages\":[{\"role\":\"user\",\"content\":\"Explain how AI works\"}]}'

虽然表面上和curl的结构一致,但手动处理转义字符很容易出错——可能存在看不见的格式问题(比如多余的转义、缺失的逗号,或者字符串拼接时的隐形错误),导致API收到的JSON不符合规范,直接返回INVALID_ARGUMENT错误。

修正方案

改用JSON.stringify()自动序列化JavaScript对象,这是处理JSON请求体最可靠的方式,能100%保证生成的JSON格式正确。修正后的代码如下:

const url = 'https://generativelanguage.googleapis.com/v1beta/openai/chat/completions';
const options = {
  method: 'POST',
  headers: {
    'content-type': 'application/json',
    authorization: 'Bearer MY_API_KEY' // 记得替换成你真实的API密钥
  },
  body: JSON.stringify({
    model: "gemini-1.5-flash",
    messages: [
      {
        role: "user",
        content: "Explain how AI works"
      }
    ]
  })
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}

为什么这样能解决问题?

JSON.stringify()会自动处理所有JSON格式的细节:

  • 正确转义字符串中的特殊字符
  • 确保对象的键和值用双引号包裹
  • 自动处理数组和对象的嵌套结构
  • 不会出现多余的逗号或缺失的引号

这样API收到的请求体和curl发送的完全一致,自然就能正常处理了。

额外检查点

虽然你说API密钥没问题,但还是可以快速确认这几点:

  1. 代码中的MY_API_KEY已经替换成了真实有效的密钥
  2. 请求头的authorization拼写正确(和curl保持一致的小写开头)
  3. content-type确实是application/json,没有拼写错误

备注:内容来源于stack exchange,提问作者Muhammad Dyas Yaskur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:25:27