使用Office365-REST-Python-Client获取SharePoint文件夹时遇URI格式错误
一、代码错误修复
你遇到的UriFormatException由3个核心问题导致,直接修改代码如下:
修正后的完整代码
import traceback from office365.runtime.auth.client_credential import ClientCredential from office365.sharepoint.client_context import ClientContext # 替换{tenant}为实际租户名称,比如contoso site_url = "https://{tenant}.sharepoint.com/sites/Colaboration" client_id = "XXXX" client_secret = "XXXX" def connectAuth(): client_credentials = ClientCredential(client_id, client_secret) # 直接使用目标站点URL初始化Context,而非根站点 ctx = ClientContext(site_url).with_credentials(client_credentials) try: # 用服务器相对路径获取文件夹,替代来宾URL方法(来宾URL用于外部用户访问场景) # 若要指定文档库,比如Documents库,路径改为"/sites/Colaboration/Documents" folder = ctx.web.get_folder_by_server_relative_url("/sites/Colaboration") ctx.load(folder) ctx.execute_query() print(f"文件夹名称: {folder.properties['Name']}") files = folder.files ctx.load(files) ctx.execute_query() for file in files: print(f"文件名称: {file.properties['Name']}") except Exception: traceback.print_exc() print('读取库内容失败') connectAuth()
代码修正点说明
- 替换占位符:把所有
{tenant}替换成你公司的SharePoint租户名称(比如租户URL是https://contoso.sharepoint.com,就填contoso) - 初始化正确Context:直接传入目标子站点的完整URL,后续操作默认基于该子站点
- 替换文件夹获取方法:
get_folder_by_guest_url是给外部来宾用户设计的接口,内部应用应使用get_folder_by_server_relative_url,传入站点/文档库的服务器相对路径
二、应用注册配置(域与重定向URI)
你使用的是客户端凭据授权模式,这种模式下重定向URI并非强制要求,但需确保以下配置正确:
1. 应用域设置
在Azure AD应用注册的「概述」页面,复制「应用程序(客户端)ID」和「目录(租户)ID」,确保代码里的client_id与页面显示一致。无需额外配置自定义域,直接使用默认的{tenant}.sharepoint.com即可。
2. 重定向URI配置(可选,仅用于其他授权模式)
若后续需要切换到授权码模式(比如用户登录场景),才需配置重定向URI:
- 进入Azure AD应用注册 → 「身份验证」→ 「添加平台」
- 选择「Web」,输入重定向URI(本地调试可填
http://localhost:8000/callback) - 根据需求勾选「ID令牌」和「访问令牌」
3. 关键权限配置(必须)
这是初学者常忽略的步骤:必须给应用授予SharePoint的访问权限:
- 进入Azure AD应用注册 → 「API权限」→ 「添加权限」
- 选择「SharePoint」→ 「应用权限」
- 添加
Sites.Read.All或Sites.ReadWrite.All权限(按需选择) - 点击「授予管理员同意」(必须操作,否则应用无访问权限)
三、常见问题排查
- 若仍报403错误,检查权限是否已授予管理员同意,以及客户端ID/密钥是否正确
- 确保服务器相对路径正确:可在SharePoint文件夹页面,从浏览器地址栏提取相对路径(比如
/sites/Colaboration/Documents)
内容的提问来源于stack exchange,提问作者GENOS
相关产品推荐
相关产品推荐

