发布到Atlassian Confluence api时出现意外的grunt-http错误

问题描述 投票:0回答:1

试图在Atlassian wiki上创建一个wiki页面。我之前使用的是python脚本,这段代码没有问题:

data = json.dumps({"type":"page", "data":"testData", "title":postTitle,"space":{"key":"EB"}, "body":{"storage":{"value": content,"representation":"storage"}}})
r = requests.post("https://estech.atlassian.net/wiki/rest/api/content/", data=data, headers=headers, auth=(confluenceLogin['username'], confluenceLogin['password']))

现在我正在尝试使用以下grunt任务配置:

    http: {
        atlassianwiki: {
            options: {
                uri: atlassianURL + "/wiki/rest/api/content/",
                headers: {"Content-Type": "application/json"},
                auth: {
                    "user": confluencelogin,
                    "pass": confluencepass
                },
                method:"POST",
                body: JSON.stringify(wikijson)
            }
        }
    }

与wikijson看起来像:

wikijson = {
            "type": "page",
            "data": "testData",
            "title": "testtitle",
            "space": {key:"EB"},
            "body": {
                "storage": {
                    "value": "<p>testing posting</p>",
                    "representation": "storage"
                }
            }
        }

当此任务运行时,我收到以下错误:

Fatal error: 500 {"statusCode":500, "message":"java.io.EOFException: No content to map to Object due to end of input"}

有点google-fu,我发现有些人声称他们通过在他们的curl命令行中添加“--post302”来解决这个问题。但我真的不知道或理解这在哪里适用。

node.js gruntjs confluence confluence-rest-api
1个回答
2
投票

我正在使用confluence REST API进行战斗,在我的情况下,问题出现在内容类型标题中,但您似乎已经拥有它。 我没有尝试创建新页面,但更新现有的Confluence API对我来说似乎有点神奇,所以我只是离开这里我开始工作之前必须做的所有步骤,也许其中一个会帮助你。

function composeRequest(method) {
  var auth = new Buffer(user + ':' + pass).toString('base64');
  var request = {
  host: 'confluence.myserver.com',
  port: 443,
  contentType: "application/json; charset=utf-8",
  'path': path,
  method: method || "GET",
  headers: {
    'Authorization': 'Basic ' + auth,
    'Content-Type': 'application/json'
  },
  rejectUnauthorized: false,
  requestCert: true,
  agent: false
};


  return request;
}

并且看起来JSON必须包含页面更新请求

  • pageId(即使它在路径内,你需要重复它)
  • 类型
  • 标题
  • 版本(这很奇怪,但你应该设置它.0或1,我不记得了)

如果您的数据已填满,则应将其转换为字符串并填写请求中的内容类型字段!

data = JSON.stringify(data);
request.headers['Content-Length'] = data.length;
https.request(request, respondHandler)
© www.soinside.com 2019 - 2024. All rights reserved.