使用Google Apps脚本发布JSON数据

Shi*_*lpi 11 json content-type jira http-post google-apps-script

Server response  :  HTTP Status 415 - Unsupported Media Type
Run Code Online (Sandbox Code Playgroud)

我试图从谷歌脚本发布JSON数据到URL,但得到上述错误.这是我的代码:

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);  

 }
Run Code Online (Sandbox Code Playgroud)

我尝试更改内容类型但没有工作.auth代码正常工作,因为我能够从URL获取.

有人知道我哪里出错吗?谢谢.

br *_*ujo 17

在你的选项对象中输入一个这样的contentType:

 var options = { "method":"POST",
             "contentType" : "application/json",
            "headers": headers,
            "payload" : payload
           };
Run Code Online (Sandbox Code Playgroud)

ContentType是fetch方法接受的高级参数之一.在这里查看更多.

  • 令人讨厌的是,UrlFetchApp.fetch()忽略/覆盖了"headers"选项中指定的"Content-Type"标头.在我偶然发现这个答案之前,我正在撕掉我的头发一个多小时试图弄清楚我做错了什么! (2认同)

小智 5

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

POST /api/ra/v1/ping HTTP/1.0
Host: app.kigo.net
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Content-Type: application/json
Run Code Online (Sandbox Code Playgroud)

很好地翻译成这个卷曲:

卷曲https://app.kigo.net/api/ra/v1/ping -X POST -H“授权:基本dXNlcm5hbWU6cGFzc3dvcmQ =” -H“内容类型:application / json”

在 Google App 脚本中翻译为:

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);
}
Run Code Online (Sandbox Code Playgroud)