我似乎无法通过Rest API在Confluence Cloud v1000.957.0上创建新页面。我已经尝试过使用cURL和Python都无济于事:我每回到HTTP 200
都会得到一个空的JSON响应。如果我将凭据更改为不正确,我会收到HTTP 401
。
curl -u ******@******.com:****** -X POST -H 'Content-Type: application/json' -d'{"type":"page","title":"TESTING123", "ancestors":[{"id":123456}], "space":{"key":"AA"},"body":{"storage":{"value":"<p>This is a new page</p>","representation":"storage"}}}' https://********.atlassian.net/wiki/rest/api/content/
为了匿名,我已经更改了cURL调用的一些细节,但我知道凭据,祖先ID,空格键和API URL是正确的。我还验证了此帐户在Confluence中具有正确的权限,可以在此空间中创建页面,并且启用了Confluence的API访问权限。
我尝试过的API调用的变体:
将?os_authType=basic
添加到网址末尾
添加尽可能多的参数(全部为空值),例如:
status: current
operations: []
metadata: {}
更改API调用以在Confluence空间的顶层创建页面(省略ancestors
字段)。
添加此标题:Accept: application/json
将view
选项添加到呼叫的body
部分,然后将其附加到网址末尾:&expand=body.view
。我发现将它添加到Python代码会产生相同的结果,但是将它添加到cURL调用会打印出类似[1] 42999
的内容(后一部分随每次调用而变化);然后根据一个新命令,或者只需按下Return
,它就会打印[1]+ Done
后跟一大块空格,然后是我刚刚发出的cURL调用。
我在Atlassian的JIRA软件中发现了一个非常类似的错误,所以很明显这也发生在JIRA上,但间歇性地发生了。 https://jira.atlassian.com/browse/JRA-41559
我对HTTP协议并不十分熟悉,所以我可能会忽略一些东西,所以我真的想要更多的选择(尽管解决方案当然是理想的)。
答案 0 :(得分:3)
问题是您使用域名作为凭据(****** @ ******。:******)< / p>
您可以通过询问主要维基内容来检查这是否有效
尝试:
curl -u <user>:<pass> https://<domain>.atlassian.net/wiki/rest/api/content/
您也可以省略密码。 Curl会要求它 - 从安全角度来看它更安全
尝试:
curl -u <user> https://<domain>.atlassian.net/wiki/rest/api/content/
答案 1 :(得分:1)
对于其他任何人来到这里......我有一个确切的问题,其中r = requests.get(URL, auth=(USER, PASSWORD)
到一个wiki页面的URL ... / wiki / rest / api / content / 123454会有200个r.status_code和r.text是空的。
修复是使用requests.session()并进行两次调用。一个(我假设)建立会话,第二个获取内容。
s = requests.session()
s.auth = (USER, PASSWORD)
r = s.get(url_base) # url_base = '.../wiki/rest/api'
r = s.get(url) # url = '.../wiki/rest/api/content/123453'
然后r.text将有内容。
答案 2 :(得分:0)
这也让我疯狂。最终通过创建会话找到了我的解决方案。不确定如何使用cURL完成此操作。可能必须使用PHP或其他东西。我使用了NodeJS
此处发生的事情是,当您提出第一个请求时,XSRF令牌将被发送出去。您需要一个会话来存储这些。存储后,必须将其与所有后续请求一起发送。
我的应用程序是用NodeJS编写的。 YMMV用其他语言,但以下为我工作:
var request = require('request');
/* GET home page. */
router.get('/', function(req, res, next) {
var cookieJar = request.jar(); // <-- THIS IS THE IMPORTANT PART
var options = { method: 'GET',
url: 'https://test.atlassian.net/wiki/rest/api/content',
jar: cookieJar,
headers:
{'cache-control': 'no-cache',
authorization: 'Basic yourBase64AuthToken' } };
// You'll need to make two requests, one to get the tokens,
// and another to actually get your query to work
request(options, function (error, response, body) {
if (error) throw new Error(error);
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
});
res.send('hello');
});