You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用atlassian-python-api连接Confluence遇404错误求助

Confluence Python API 404错误排查与解决

问题场景

使用atlassian-python-api==3.41.1连接Confluence时触发404错误,具体情况:

  • 配置:用户名是邮箱地址,密码为Atlassian API密钥(已多次重新生成)
  • 权限:管理员确认账号拥有所有必要权限(权限面板全绿勾)
  • 页面访问:目标页面URL在浏览器中可正常打开
  • API请求问题:调用API时,客户端自动将/rest/api/content/<page_id>追加到传入的页面URL末尾,形成错误请求路径,触发404:
HTTPError: 404 Client Error: Not Found for url: https://company-site.atlassian.net/wiki/spaces/my-space/pages/123456/Confluence+Python+API/rest/api/content/123456

核心疑问

  1. URL末尾被追加的字符串是否是导致404错误的原因?
  2. 如果是,如何阻止该自动追加行为?
  3. 如果不是,还应排查哪些内容?

解决方案

1. 错误原因确认

是。初始化Confluence客户端时传入的是具体页面的完整URL,而客户端设计逻辑是将API路径(如/rest/api/content/<page_id>)追加到你提供的url参数后,导致路径拼接错误。正确做法是传入Confluence实例的根域名,而非单个页面的URL。

2. 修正代码

修改初始化客户端的URL为Confluence实例的根路径(Cloud版通常为https://<your-domain>.atlassian.net/wiki/),保留提取页面ID的逻辑即可:

from atlassian import Confluence
import re
from urllib.parse import urlparse

# 替换为Confluence实例根URL,而非具体页面URL
BASE_URL = 'https://company-site.atlassian.net/wiki/'
# 原页面URL仅用于提取page_id
PAGE_URL = 'https://company-site.atlassian.net/wiki/spaces/my-space/pages/123456/Confluence+Python+API/'

def establish_connection(url: str, username: str, password: str) -> Confluence:
    return Confluence(url=url, username=username, password=password)

def get_page_id_from_url(url: str) -> int | None:
    match = re.search(r'/pages/(\d+)/', url)
    return int(match.group(1)) if match else None

def generate_content(dynamic_text: str = '') -> str:
    static_content = """
    h1. Header
    h2. Sub-header
    This is text.
    # Numbered list
    ## Sub-list
    (/)
    ||Header 1||Header 2||
    |Cell A1|Cell B1|
    {info:title=Info}
    This is an info panel
    {info}
    {code:python}
    print('Hello, world!')
    {code}
    ----
    {quote}
    This is a quote.
    {quote}
    """
    return static_content + f'\nh2. Dynamic Text\n{dynamic_text}'

def update_confluence_page(confluence, page_id: str, new_content: str) -> None:
    confluence.update_page(
        page_id=page_id,
        title='Your Updated Page Title',
        body=new_content
    )

if __name__ == '__main__':
    # 从配置获取用户名和API密钥
    username = project_params.confluence.username
    password = project_params.confluence.api_key
    
    # 用根URL初始化客户端
    confluence = establish_connection(BASE_URL, username, password)
    
    page_id = get_page_id_from_url(PAGE_URL)
    if not page_id:
        raise ValueError("无法从页面URL提取有效page_id")
    
    # 正常调用API
    page_info = confluence.get_page_by_id(page_id)
    content = generate_content()
    update_confluence_page(confluence, page_id, content)

额外排查点(若修正后仍报错)

如果修改URL后还是出现404或权限错误,检查以下内容:

  • 确认API密钥是从Atlassian账户「安全设置」中生成的,不是账号登录密码
  • 验证页面ID正确性:可在Confluence页面的「查看页面信息」中确认ID,或重新核对浏览器URL
  • 检查空间权限:确保账号对目标页面所在空间拥有「编辑」或「管理」权限(部分权限针对空间而非单个页面)
  • 网络环境:确认无代理、防火墙拦截API请求,必要时在Confluence初始化时添加proxies参数
  • Confluence版本适配:Cloud版与Server/Data Center版API路径略有差异,确保客户端版本适配实例类型

内容的提问来源于stack exchange,提问作者DanielBell99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:19:51