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

使用Google Apps Script发送OAuth 2.0认证请求遇404错误求助

问题分析与修正方案

你的代码存在几个关键错误导致请求失败,下面逐一说明并给出修正后的代码:

错误1:Authorization头未做Base64编码

API明确要求public_key:private_key字符串必须经过Base64编码后再拼在Basic 后面,你直接拼接了原始字符串,这会导致认证失败。

错误2:请求体放在了URL查询参数中

API要求POST请求的body里传递grant_type=client_credentials,但你把它拼在了URL后面当作查询参数,不符合POST请求的参数传递规范。

错误3:未显式指定Content-Type(可选但推荐)

虽然UrlFetchApp默认使用application/x-www-form-urlencoded,但显式声明Header可以避免潜在的格式问题。


修正后的代码

function authentication() {
  const ENDPOINT = 'https://你的完整API域名'; // 确保这里是带http/https的完整地址
  const CLIENT_ID = '你的public_key';
  const CLIENT_SECRET = '你的private_key';
  const TOKEN_URL = ENDPOINT + '/oauth/token';

  // 对client_id:client_secret进行Base64编码
  const authString = Utilities.base64Encode(`${CLIENT_ID}:${CLIENT_SECRET}`);
  const HEADERS = {
    'Authorization': `Basic ${authString}`,
    'Content-Type': 'application/x-www-form-urlencoded'
  };

  const BODY = 'grant_type=client_credentials';
  const OPTIONS = {
    method: 'post',
    headers: HEADERS,
    payload: BODY // 将请求体放在payload字段中,而非URL
  };

  try {
    let response = UrlFetchApp.fetch(TOKEN_URL, OPTIONS);
    Logger.log(response.getContentText());
  } catch (e) {
    Logger.log('请求错误: ' + e.toString());
  }
}

额外提醒:如果还是出现404,请检查ENDPOINT是否是完整的API域名(比如https://api.example.com,不要漏掉协议头或域名后缀),确认/oauth/token路径是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:11:15