使用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
核心疑问
- URL末尾被追加的字符串是否是导致404错误的原因?
- 如果是,如何阻止该自动追加行为?
- 如果不是,还应排查哪些内容?
解决方案
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
相关产品推荐
相关产品推荐

