通过REST API创建Confluence页面返回500错误的原因排查求助
问题排查及修复方案
第一类:代码语法/标准不兼容问题
- Fetch请求体参数错误:你当前代码里用
data字段传递请求体是jQuery等类库的写法,原生Fetch API要求使用body字段传递请求内容,且JSON格式的请求体需要先调用JSON.stringify()序列化为字符串,否则服务端接收到非法格式的 payload 会直接抛出500错误。 - 鉴权头构造不规范:标准Basic Auth的Header值格式为
Basic [base64(用户名:密码)],你当前直接写Basic USER:PASS不符合规范,即使GET请求能正常运行,也可能是Confluence对GET/POST请求的鉴权校验逻辑有差异,需要先修正为标准Base64编码格式。 - 缺CSRF校验头:Confluence Server默认对所有POST请求校验
X-Atlassian-Token头,你需要在请求头里新增'X-Atlassian-Token': 'no-check',否则部分版本会直接返回500错误。
第二类:业务参数合法性问题
- 检查你填写的父页面ID
97059352是否真实存在、未被删除 - 检查空间Key
EXAMPLE_SPACE拼写是否正确,当前鉴权的用户是否拥有该空间的页面创建权限 - 检查页面标题
New Page是否和目标空间下已有的页面重名,Confluence不允许同空间下存在同名页面,部分版本遇到同名创建请求时也会抛出500错误
第三类:调试建议
如果修改后仍报错,可先打印完整响应体查看具体错误信息,Confluence的REST API 500响应一般会附带具体异常堆栈,可直接定位具体错误原因:
fetch(url, options) .then(res => res.text()) .then(text => console.log('完整响应内容:', text))
修正后的代码示例
function createPage() { let url = "http://exampledomain:8090/confluence/rest/api/content/" // 构造标准Basic Auth,注意替换成真实的用户名密码 const auth = btoa('你的用户名:你的密码') fetch(url, { method: 'POST', headers: { 'Authorization': `Basic ${auth}`, 'Content-Type': 'application/json', 'X-Atlassian-Token': 'no-check' }, // 替换data为body,序列化JSON body: JSON.stringify({ 'type': 'page', 'title': "New Page", 'ancestors': [{ 'id': 97059352 }], 'space': { 'key': "EXAMPLE_SPACE" }, 'body': { 'storage': { 'value': "<h1>New Page!</h1>", 'representation': 'storage', } }, }) }) .then(response => response.json().then(data => console.log('创建成功', data))) .catch(err => console.log('请求错误', err.message)) }
内容的提问来源于stack exchange,提问作者Laurence
相关产品推荐
相关产品推荐

