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

