0

尝试在 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”来解决此问题。但我真的不知道或理解这如何适用于此。

4

1 回答 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)
于 2015-05-07T17:13:45.817 回答