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

使用Office365-REST-Python-Client获取SharePoint文件夹时遇URI格式错误

问题解决:Office365-REST-Python-Client访问SharePoint文件夹报错及应用注册配置

一、代码错误修复

你遇到的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:24:51