【问题标题】:Google Apps Script to Create Confluence Page -- Results in Status Code 500用于创建 Confluence 页面的 Google Apps 脚本——导致状态码 500
【发布时间】:2019-03-22 23:16:48
【问题描述】:

注意:我还在 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)

我意识到那里有我见过的 curl 样本,但对我没有帮助。 我做错了什么?

编辑:3 月 25 日 @田池 我按照您的建议修改了代码:

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

我收到与以前相同的错误。

【问题讨论】:

    标签: google-apps-script confluence-rest-api


    【解决方案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)
    };
    

    注意:

    • 此修改假设payloadheaders中的每个值都是正确的。
    • 标题中的"Content-Type": "application/json" 也可以作为"contentType": "application/json" 放入params

    参考资料:

    我无法测试此修改。所以如果这不起作用,你能提供错误信息吗?我想考虑一下这个问题。

    编辑:

    the official document看来body的属性是"body":{"storage":{"value":"&lt;p&gt;This is a new page&lt;/p&gt;","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);
    

    注意:

    • 在我的环境中,我可以确认结果与官方示例脚本的结果相同。如果这不起作用,请再次确认payloadheaders 的每个值。

    【讨论】:

    • @Steve Murphy 对于给您带来的不便,我深表歉意。我注意到body 的属性存在问题。那你能确认一下吗?
    • 我实施了您的更改并且脚本有效。只有一个问题:当我创建页面时,它仅在我的仪表板中可见,并且我需要从那里将其移动到所需空间中的正确子页面。 (这不是最佳的。)如何创建页面,以便将其放置在空间中的子页面中?
    • @Steve Murphy 感谢您的回复。我很高兴您的第一个问题得到了解决。关于您的新问题,您可以将其发布为新问题吗?因为您最初的问题是删除脚本的错误,而您的新问题与 API 的规范有关。这与第一个不同。因此,请关闭此问题并将您的新问题作为新问题发布。当您发布新问题时,请提供详细信息。这样,它将对遇到相同问题的其他用户有用。如果您能合作解决您的问题,我很高兴。
    • 要将页面放置在所需位置,请将其添加到有效负载中:“ancestors”:[{“id”:}],感谢您的帮助。非常感谢您花费的时间。!
    • 这是我发现的最接近我的问题的方法,但是我不想创建一个融合页面,而是基于 ID 获取一个融合页面并以 Json 格式获取结果,以便我可以解析融合正文内容。 @SteveMurphy 你会提供一些关于如何做到这一点的提示吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多