2014-11-04 3 views
0

Atlassian wiki에서 wiki 페이지를 만들려고합니다. 나는 이전에 파이썬 스크립트를 사용하고이 코드는 아무런 문제가 일하지 :Atlassian Confluence API에 게시 할 때 예기치 않은 grunt-http 오류가 발생했습니다

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

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

: 나는 다음과 같은 툴툴 작업 구성을 사용하기 위해 노력하고있어 이제

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

그리고이 작업을 실행할 때 다음 오류가 발생합니다.

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와 싸우고 있었고 제 경우에는 문제가 content-type 헤더에 있었지만 이미 갖고있는 것처럼 보입니다.
새로운 페이지를 만들지 만 기존 페이지를 업데이트하려고하지 않았습니다. 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을 포함해야 해당 페이지 업데이트 요청 등장

  • 페이지 id
  • 유형
  • 제목
  • 에게 (심지어는, 당신은 그것을 반복 내부 경로 필요가있다) 버전 (이상한데, 설정해야합니다 .0 또는 1, 기억이 안납니다)

데이터가 채워지면이를 문자열로 변환하고 요청에서 content-type 필드를 채워야합니다!

data = JSON.stringify(data); 
request.headers['Content-Length'] = data.length; 
https.request(request, respondHandler)