Google Apps Script发起POST请求返回405错误但Postman请求正常
问题产生核心原因
405状态码表示服务器拒绝了当前请求使用的HTTP方法,本地/Postman请求正常但Google Apps Script(GAS)请求异常,基本是GAS的UrlFetchApp默认行为和普通HTTP客户端存在差异导致,常见诱因如下:
- 重定向时自动变更请求方法:
UrlFetchApp默认开启重定向跟随,当服务器返回301/302重定向(比如http转https、URL末尾补斜杠、域名跳转等场景)时,会自动将原本的POST请求改为GET请求,若目标接口仅允许POST方法就会返回405。 - 请求头缺失/不匹配:部分Nginx服务器会校验请求头中的
Accept、User-Agent等字段,GAS默认请求头和Postman不一致时会被拦截。 - URL不规范:使用的接口URL和服务器预期的格式不符(比如缺少末尾斜杠、协议用http而非https)触发重定向。
可行解决方案
1. 优先排查重定向问题(最高概率解决)
先修改请求参数关闭重定向跟随,同时开启HTTP异常静默,确认是否是重定向导致的方法变更:
const header = { 'X-TOKEN': 'TOKEN', // 补全标准请求头 'Accept': 'application/json', 'Content-Type': 'application/json' }; const urlRegions = '你的接口URL'; // 优先替换为https协议的地址 function getList() { const query = { "active": true, "size":100 }; const options = { 'method' : 'post', 'headers' : header, 'payload' : JSON.stringify(query), 'contentType': 'application/json', 'followRedirects': false, // 关闭自动重定向 'muteHttpExceptions': true // 捕获非200响应不直接抛异常 }; var response = UrlFetchApp.fetch(urlRegions, options); Logger.log(response.getResponseCode()); Logger.log(response.getAllHeaders()); // 打印响应头 // 如果返回301/302,取响应头中的Location字段作为新的URL发起POST请求即可 if(response.getResponseCode() >=300 && response.getResponseCode() <400){ const redirectUrl = response.getAllHeaders()['Location']; const newResponse = UrlFetchApp.fetch(redirectUrl, options); Logger.log(newResponse.getContentText()); }else{ Logger.log(response.getContentText()); } }
2. 替换标准请求User-Agent
如果上述方案无效,可以在请求头中添加和Postman一致的User-Agent,避免服务器拦截GAS的默认UA:
const header = { 'X-TOKEN': 'TOKEN', 'Accept': 'application/json', 'Content-Type': 'application/json', 'User-Agent': 'PostmanRuntime/7.32.0' };
3. 校验URL格式
确认接口地址是否符合服务器要求:
- 优先使用https协议的地址,不要用http
- 检查地址末尾是否需要加斜杠(比如
/api/getList和/api/getList/是两个不同的地址,很容易触发重定向)
内容的提问来源于stack exchange,提问作者Nurbergen Akbergenov
相关产品推荐
相关产品推荐

