Google Apps Script для создания страницы слияния - результаты в коде состояния 500 - PullRequest
1 голос
/ 23 марта 2019

Примечание: я также разместил этот вопрос на форуме Atlassian здесь: https://community.atlassian.com/t5/Confluence-questions/Google-Apps-Script-to-Create-Confluence-Page-HTTP-500-Error/qaq-p/1039040#M66094

Я обращаюсь к более широкой аудитории здесь, на SO.

Я использую следующий код скрипта приложений Google в Листе Google для создания страницы слияния:

headers = {"Authorization" : "Basic " + Utilities.base64Encode(user + ':' + 
pswd), "Content-Type": "application/json"};

url = "https://confluence.asdf.com/rest/api/content/";
var params = { 
  "method":"POST",
  "headers":headers,
  "muteHttpExceptions": false,
  "type":"page",
  "title":newTitle,
  "space":{"key":"DOC"},
  "body":{"storage":{"value": "<p>This is <br/> a new page</p>" }, 
  "representation":"storage"} 
};
var createResponse = UrlFetchApp.fetch(url, params); 

Однако, когда я отправляю запрос, я получаю этот ответ:

Request failed for https://confluence.atlas.asdf.com/rest/api/content/ 
returned code 500.
Truncated server response: {"statusCode":500,"
message":"<?> No content to map to Object due to end of 
input","reason":"Internal Server Error"} (use muteHttpExceptions option to 
examine full response)

Я понимаю, что есть образцы локонов, которые я видел, но они мне не помогают. Что я делаю не так?

Редактировать: 25 марта @Tanaike Я изменил код, как вы предложили:

    headers = {"Authorization" : "Basic " + Utilities.base64Encode(user + ':' + pswd) };


    var payload = {
      "type": "page",
      "title": newTitle,
      "space": {"key": "DOC"},
      "body": {
        "storage": {
          "value": "<p>This is <br/> a new page</p>"
        },
        "representation": "storage"
      }
    };
    var params = { 
      "method": "POST",
      "headers": headers,
      "muteHttpExceptions": false,
      "payload": JSON.stringify(payload),
      "contentType": "application/json"
    };

    var createResponse = UrlFetchApp.fetch(url, params);        

Я получаю ту же ошибку, что и раньше.

1 Ответ

1 голос
/ 23 марта 2019

Как насчет этой модификации?

Модифицированный скрипт:

Пожалуйста, измените params следующим образом и протестируйте снова. Из сообщения об ошибке в вашем вопросе тело запроса было помещено в свойство payload.

var payload = {
  "type": "page",
  "title": newTitle,
  "space": {"key": "DOC"},
  "body": {
    "storage": {
      "value": "<p>This is <br/> a new page</p>"
    },
    "representation": "storage"
  }
};
var params = { 
  "method": "POST",
  "headers": headers,
  "muteHttpExceptions": false,
  "payload": JSON.stringify(payload)
};

Примечание:

  • Эта модификация предполагает, что каждое значение в payload и headers является правильным.
  • "Content-Type": "application/json" в заголовках также можно указать в params как "contentType": "application/json".

Ссылки:

Я не могу проверить эту модификацию. Так что, если это не сработало, можете ли вы предоставить сообщение об ошибке? Я хотел бы подумать о проблеме.

Edit:

Из официального документа представляется, что свойство body является "body":{"storage":{"value":"<p>This is a new page</p>","representation":"storage"}}}. Поэтому, пожалуйста, измените следующим образом.

Модифицированный скрипт:

headers = {"Authorization" : "Basic " + Utilities.base64Encode(user + ':' + pswd) };
var payload = {
  "type": "page",
  "title": newTitle,
  "space": {"key": "DOC"},
  "body": {
    "storage": {
      "value": "<p>This is <br/> a new page</p>",
      "representation": "storage" // Modified
    }
  }
};
var params = { 
  "method": "POST",
  "headers": headers,
  "muteHttpExceptions": false,
  "payload": JSON.stringify(payload),
  "contentType": "application/json"
};
var createResponse = UrlFetchApp.fetch(url, params);

Примечание:

  • В моем окружении я мог подтвердить, что результат был таким же, как в официальном примере сценария. Если это не помогло, пожалуйста, подтвердите каждое значение payload и headers, снова.
...