2014-11-04 25 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) 
相關問題