使用Google Script触发GitHub Workflow时遇404错误求助
问题:Google Script调用GitHub Actions API返回404错误
我想用Google表单触发GitHub Workflow,用curl测试功能正常,但用以下Google Script代码运行时,返回404错误:
const data = {"ref": "main"}; var options = { method: "post", header: {authorization: 'token <MY_TESTED_GITHUB_TOKEN>'}, payload: JSON.stringify(data) }; var response = UrlFetchApp.fetch("https://api.github.com/repos/<ID>/<MY_REPO>/actions/workflows/new_request.yml/dispatches", options);
错误信息:
Exception: Request failed for https://api.github.com returned code 404. Truncated server response: {"message":"Not Found","documentation_url":"https://docs.github.com/rest/reference/actions#create-a-workflow-dispatch-event"} (use muteHttpExceptions option to examine full response)
解决方案
出现404的核心原因是请求配置有误,以下是修正后的代码及关键修改点:
const data = {"ref": "main"}; var options = { method: "post", headers: { // 修正:header → headers(复数) authorization: 'token <MY_TESTED_GITHUB_TOKEN>', 'Content-Type': 'application/json' // 新增:指定请求体格式为JSON }, payload: JSON.stringify(data), muteHttpExceptions: true // 可选:开启后可获取完整响应用于调试 }; var response = UrlFetchApp.fetch("https://api.github.com/repos/<ID>/<MY_REPO>/actions/workflows/new_request.yml/dispatches", options); // 调试用:打印完整响应内容 Logger.log(response.getContentText());
关键修改说明:
- 请求头键名修正:Google Script的
UrlFetchApp配置中,请求头的正确键名是headers(复数),原代码中的header会被忽略,导致GitHub未收到授权信息,返回404(API会用404隐藏权限不足的真实原因)。 - 添加Content-Type头:由于payload是JSON字符串,必须明确指定
Content-Type: application/json,否则GitHub会将请求体当作表单数据解析,无法识别ref参数,进而触发路径不存在的错误。 - 可选调试配置:
muteHttpExceptions: true可以避免直接抛出异常,允许你获取完整的响应内容,方便排查后续可能出现的问题。
此外,建议再核对以下内容:
- 确认API路径中的
<ID>(用户名/组织名)、<MY_REPO>(仓库名)、new_request.yml(工作流文件名)拼写完全正确,GitHub对路径大小写敏感。 - 确保GitHub Token拥有
repo权限(尤其是workflow权限),虽然curl测试正常,但需确认Google Script使用的是同一Token。
内容的提问来源于stack exchange,提问作者ultrafrog
相关产品推荐
相关产品推荐

