Скрипт Google Apps для создания результатов страницы Confluence в коде состояния 500

Примечание. Я также разместил этот вопрос на форуме 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 для создания страницы Confluence:

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

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


person Steve Murphy    schedule 22.03.2019    source источник


Ответы (1)


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

Измененный скрипт:

Измените 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".

Использованная литература:

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

Редактировать:

Из официального документа кажется что свойство 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.
person Tanaike    schedule 22.03.2019
comment
@ Стив Мерфи Приносим извинения за неудобства. Я заметил, что проблема в собственности body. Не могли бы вы это подтвердить? - person Tanaike; 26.03.2019
comment
Я внес ваши изменения и скрипт работает. Только одна проблема: когда я создаю страницу, она видна только на моей панели инструментов, и оттуда мне нужно переместить ее на правильную дочернюю страницу в желаемое пространство. (Это не оптимально.) Как мне создать страницу так, чтобы она помещалась на дочернюю страницу в пространстве? - person Steve Murphy; 27.03.2019
comment
@ Стив Мерфи Спасибо за ответ. Я рад, что ваша первая проблема решена. О вашем новом выпуске, можете ли вы опубликовать его как новый вопрос? Потому что ваш первоначальный вопрос - удалить ошибку вашего скрипта, а ваша новая проблема связана со спецификацией API. Это отличается от первого. Поэтому, пожалуйста, закройте этот вопрос и опубликуйте свой новый выпуск как новый вопрос. Когда вы публикуете новый вопрос, включите подробную информацию. Таким образом, это будет полезно для других пользователей, у которых есть такая же проблема. Если вы можете сотрудничать, чтобы решить вашу проблему, я буду рад. - person Tanaike; 28.03.2019
comment
Чтобы разместить страницу в желаемом месте, добавьте это в payload: ancestors: [{id: ‹ID родительской страницы›}], и спасибо за помощь. Я очень ценю время, которое вы потратили! - person Steve Murphy; 28.03.2019