VBA向Google Apps Script发送POST请求持续返回405状态码问题
解决VBA POST请求Google Apps Script API返回405的问题
核心原因排查及解决方案
1. 确认GAS部署URL的正确性
必须使用正式部署后的Web应用URL,格式为https://script.google.com/macros/s/[唯一部署ID]/exec。绝对不能使用脚本编辑器中的「测试部署」预览URL(格式含/dev),这类预览URL仅支持浏览器访问,外部POST请求会直接返回405错误。
2. 对齐VBA请求头与Postman配置
Postman能正常请求说明GAS接口本身没问题,问题大概率出在VBA的请求头或对象版本:
- 使用高版本XMLHTTP对象:推荐
MSXML2.XMLHTTP.6.0,避免旧版本兼容性问题。 - 匹配Postman的
Content-Type:如果Postman中设置的是application/json,VBA需同步修改,而非text/plain。 - 添加User-Agent头:模拟浏览器请求,避免GAS部署拦截默认VBA请求头。
调整后的VBA代码示例:
Dim objHTTP As Object Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0") With objHTTP .Open "POST", Url, False .setRequestHeader "Content-Type", "application/json" ' 和Postman保持一致 .setRequestHeader "Accept-Language", "en-US" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" .send JsonString ' 输出响应信息用于调试 Debug.Print "状态码:" & .Status Debug.Print "响应内容:" & .ResponseText End With Set objHTTP = Nothing
3. 验证GAS部署权限设置
重新部署GAS时,确保:
- 部署类型选择「Web应用」
- 执行权限设置为「任何人,甚至匿名」
- 访问权限设置为「任何人,甚至匿名」
部署完成后复制最新的URL替换VBA中的旧地址。
4. 检查请求内容格式
确保JsonString是有效的JSON格式(比如键值对用双引号包裹),如果Postman发送的是JSON数据,VBA中的字符串必须完全匹配格式要求。
5. 排查重定向问题
旧的GAS部署URL可能存在重定向,若重定向后的地址不支持POST方法会返回405。使用最新的部署URL,同时可在VBA中添加头禁用不必要的连接复用:.setRequestHeader "Connection", "close"。
内容的提问来源于stack exchange,提问作者Hubert1957
相关产品推荐
相关产品推荐

