使用 Google Apps 脚本发布 JSON 数据

Posted

技术标签:

【中文标题】使用 Google Apps 脚本发布 JSON 数据【英文标题】:Using Google Apps Script to Post JSON Data 【发布时间】:2013-06-25 11:21:27 【问题描述】:

我正在尝试将 JSON 数据从 google 脚本发布到 URL,但出现上述错误:

服务器响应:HTTP 状态 415 - 不支持的媒体类型

我的代码:

function myFunctionpost() 
  var url = "http://abc.xyz.org/jira/rest/api/2/issue";
  var data = 
    "project": 
      "key": "KEY"
    ,
    "summary": "create issue.",
    "description": "Creating of an issue from google spreadsheet using the REST API",
    "issuetype": 
      "name": "Bug"
    
  ;
  var payload = JSON.stringify(data);

  var headers = 
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Authorization": "Basic _authcode_"
  ;

  var options = 
    "method": "POST",
    "headers": headers,
    "payload": payload
  ;
  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response);

我尝试更改content-type,但没有成功。

身份验证码有效,因为我能够从 URL 获取。

【问题讨论】:

【参考方案1】:

在 UrlFetchApp 语法中非常反直觉,但是:

POST /api/ra/v1/ping HTTP/1.0
Host: app.kigo.net
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Content-Type: application/json

很好地翻译成这种卷曲:

curl https://app.kigo.net/api/ra/v1/ping -X POST -H "授权: 基本 dXNlcm5hbWU6cGFzc3dvcmQ=" -H "Content-Type: application/json"

在 Google 应用脚本中转换为:

function myFunction() 
  var headers = 
    "Authorization": "Basic dXNlcm5hbWU6cGFzc3dvcmQ="
  ;
  var options = 
    "contentType": "application/json",
    "method": "post",
    "headers": headers,
    "payload": "test"
  ;
  var response = UrlFetchApp.fetch("https://app.kigo.net/api/ra/v1/ping", options);

【讨论】:

【参考方案2】:

像这样将contentType 对象添加到您的options

var options = 
  "method": "POST",
  "contentType": "application/json",
  "headers": headers,
  "payload": payload
;

ContentType 是 fetch 方法接受的高级参数之一。查看更多here。

【讨论】:

令人讨厌的是 UrlFetchApp.fetch() 忽略/覆盖“headers”选项中指定的“Content-Type”标头。我一直在扯头发一个多小时,试图找出我做错了什么,直到我偶然发现了这个答案!

以上是关于使用 Google Apps 脚本发布 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

将来自 Google Apps 脚本的 JSON 作为“访问网络应用程序的用户”提供服务

在 Google Apps 脚本中使用 Mandrill API

使用 Google Apps 脚本设置压缩查询导出

Google Apps 脚本 - 如何解析响应

带有 GraphQL 解析错误的 Google Apps 脚本 API 请求

使用Google Apps脚本Web应用添加到Google表格