使用 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