2014-11-04 61 views
0

尝试在Atlassian wiki上创建维基页面。我以前使用Python脚本,该代码工作没有问题:发布到Atlassian Confluence api时意外的grunt-http错误

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'])) 

现在,我尝试使用下面的咕噜任务配置:

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”来解决这个问题。但我并不真正了解或理解这里如何应用。

谢谢,我希望这是有道理的。

回答

2

我与汇合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) 
相关问题