【问题标题】:POST request and 405 error in Google Apps ScriptGoogle Apps 脚本中的 POST 请求和 405 错误
【发布时间】: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)
  }

【问题讨论】:

    标签: javascript google-apps-script http-status-code-405 urlfetch


    【解决方案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 ;)
    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多