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

将SharePoint Zip文件下载PowerShell命令转换为Python代码时遭遇400错误的问题排查

问题分析与解决方案

你的问题核心出在URL中$value的转义处理错误——PowerShell和Python的转义规则完全不同,导致你发送给SharePoint的请求路径格式异常,最终返回400 Bad Request错误。

具体问题点拆解

在PowerShell里,$是变量标识符,所以必须用反引号(`)转义,才能让它作为普通字符传递给服务器:

$FileUrl = "https://xxx.sharepoint.com/sites/xxx/_api/Web/GetFileByServerRelativePath(decodedurl='sites/xxx/path/to/file.zip')/`$value"

但在Python中,反引号()不是转义字符,你写的URL里的`$value会被Python原样解析成包含反引号的字符串,也就是实际发送的URL末尾是`$value,而非SharePoint接口要求的$value`。服务器无法识别这个错误路径,自然返回400错误。

修正后的Python代码

只需要去掉$前面的反引号,直接保留$value即可:

import requests

# 移除$前的反引号,使用正确的URL路径
FileUrl = "https://xxx.sharepoint.com/sites/xxx/_api/Web/GetFileByServerRelativePath(decodedurl='sites/xxx/path/to/file.zip')/$value"
headers = { "Authorization": "Bearer eyJ..." }

# 建议添加stream=True处理大文件,避免内存过载
r = requests.get(FileUrl, headers=headers, stream=True)

# 先验证请求是否成功,避免生成空文件
r.raise_for_status()

# 分块写入文件,更高效稳定
with open(r"C:\path\to\file.zip", "wb") as f:
    for chunk in r.iter_content(chunk_size=8192):
        f.write(chunk)

print("文件下载完成!")

额外优化建议

  • 加上stream=True和分块写入:对于较大的Zip文件,这种方式不会一次性把整个文件加载到内存,避免内存占用过高。
  • 使用r.raise_for_status():在请求失败时直接抛出异常,能快速定位问题,而不是默默生成空文件。
  • 确认令牌有效性:虽然PowerShell能成功,但要保证Python运行时你的Bearer令牌仍在有效期内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:12:29