Google Apps 脚本中的 POST 请求和 405 错误
Posted
技术标签:
【中文标题】Google Apps 脚本中的 POST 请求和 405 错误【英文标题】:POST request and 405 error in Google Apps Script 【发布时间】:2019-05-08 06:38:12 【问题描述】:我在 GAS 中遇到了一些问题。我使用需要 Cookie 来进行 POST 请求的 API。什么时候,我用 Postman 尝试它可以工作,但使用脚本我仍然收到 405 错误:/
首先,我发出一个登录请求,它返回一个类似这样的 cookie:JSESSIONID=D55B09A9076826AB6FC35B79B803C3F4; Path=/lambdapath; Secure; HttpOnly,authash=29cb2e5466f8a923da588fa55914fd72
然后,我构建一个这样的 POST 请求:
function createObject(body, cookie)
var options =
'method': 'post',
'contentType': 'application/json',
'Cookie': cookie,
'payload' : JSON.stringify(body)
var header = 'headers': options
try
var response = UrlFetchApp.fetch("https://urlOftheAPI/create", header);
Logger.log('Saved one item :' + response.getResponseCode())
return response.getResponseCode();
catch(err)
throw new Error(err);
当我记录标题时,它会返回:
"headers":
"method": "post",
"contentType": "application/json",
"Cookie": "JSESSIONID=D55B09A9076826AB6FC35B79B803C3F4; Path=/lambdapath; Secure; HttpOnly,authash=29cb2e5466f8a923da588fa55914fd72",
"payload": "\"foo\":\"bar\""
感谢您的帮助:)
编辑
感谢@DimuDesign。它在以这种格式传递选项时起作用:
var options =
'method': 'post',
'contentType': 'application/json',
'headers':
'cookie': 'JSESSIONID=D55B09A9076826AB6FC35B79B803C3F4; Path=/lambdapath; Secure; HttpOnly,authash=29cb2e5466f8a923da588fa55914fd72'
,
'payload' : JSON.stringify(body)
【问题讨论】:
【参考方案1】:您对UrlFetchApp.fetch
的调用格式不正确。检查以下参考文档以了解正确的语法:
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch(String,Object)
提示:headers
对象是options
对象的高级参数。
【讨论】:
我更新了我的问题。我写的时候犯了一个错误:/代码在我的脚本中写得很好,但它不起作用 @PierreJones 它仍然是错误的(请参阅我添加到答案中的提示)。检查我的答案中链接的文档,它将帮助您解决语法问题。 它有效 :) 你是对的。使用这种结构:var options = 'method': 'post', 'contentType': 'application/json', 'headers': 'cookie': cookie , 'payload' : JSON.stringify(body)
@PierreJones Viola! :) 在做任何其他事情之前始终参考规范文档...从长远来看可以为您节省大量时间。【参考方案2】:
我使用这段代码来获取 url:
var url = 'https://api.example.com/';
var response = UrlFetchApp.fetch(url);
var data = JSON.parse(response.getContentText());
var result = data.headers.Cookie;
return result;
【讨论】:
问题不在于如何拦截 cookie,而在于如何使用 contenType 在标头中传递它......另外,我已经尝试过你的代码来拦截它,但它不起作用。当我登录到 API 时,它不会返回正文,所以JSON.parse(response.getContentText());
failed ;)以上是关于Google Apps 脚本中的 POST 请求和 405 错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google Apps 脚本的 Facebook API 批处理请求
如何在对 Google Apps 脚本的发布请求中捕获上传的文件?
链接到 Google Apps 脚本中的另一个 HTML 页面