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

使用Shareplum向SharePoint上传文件出现X-RequestDigest键错误如何解决

错误原因

你获取X-RequestDigest的逻辑完全错误:你发起的第一个POST请求本身是文件上传请求,该请求要求请求头携带合法的X-RequestDigest才能执行成功,但你此时填的是占位字符串FormDigestValue,这个请求必然执行失败,失败响应的头里自然不存在X-RequestDigest字段,触发KeyError。

修复步骤
  • 调用SharePoint专门的contextinfo接口获取合法的X-RequestDigest,不要通过上传请求拿
  • 修正文档库路径的URL编码问题,Shared%20Documents要改为原始字符串Shared Documents,否则接口会识别不到路径
  • 修正状态码判断逻辑,response.status_code是整数类型,不要和字符串'200'做比对
修正后的完整代码
import requests
from shareplum import Office365

# Set Login Info
username = 'my.email@address.com'
password = 'myverifiedapppassword'
site_name = 'mysite'
base_path = 'https://xxxxxxxx.sharepoint.com'
site_path = base_path + "/sites/" + site_name
doc_library = 'Shared Documents'
file_name = "hellotest.txt"

# Obtain auth cookie
authcookie = Office365(base_path, username=username, password=password).GetCookies()
session = requests.Session()
session.cookies = authcookie
session.headers.update({'user-agent': 'python_bite/v1'})
session.headers.update({'accept': 'application/json;odata=verbose'})

# 正确获取X-RequestDigest的逻辑
digest_resp = session.post(f"{site_path}/_api/contextinfo")
digest_value = digest_resp.json()['d']['GetContextWebInformation']['FormDigestValue']
session.headers.update({'X-RequestDigest': digest_value})

# Upload file
with open(file_name, 'rb') as file_input:
    try:
        response = session.post(
            url=f"{site_path}/_api/web/GetFolderByServerRelativeUrl('{doc_library}')/Files/add(url='{file_name}',overwrite=true)",
            data=file_input)
        print("response: ", response.status_code)
        if response.status_code == 200:
            print("File uploaded successfully")
    except Exception as err:
        print("Something went wrong: " + str(err))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:12:02