如何使用Python的Requests库从公开Sharepoint共享链接下载文本文件
解决方案
1. 可以直接用Requests库完成下载
出现该问题的本质是没有维持SharePoint匿名访问所需的会话Cookie,单次GET请求无法保留跳转过程中下发的匿名授权凭证,所以被重定向到登录页。修改代码如下:
import requests # 注意原URL末尾的空格要删除 url = "https://<abc>-my.sharepoint.com/personal/gamma_<abc>/_layouts/15/download.aspx?UniqueId=a0db276e%2Ddf75%2D49b7%2Db671%2D1c49e365ef3f" hdr = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' } # 用Session维持会话,自动保存跳转过程中下发的匿名授权Cookie with requests.Session() as sess: # 允许重定向,自动走完匿名授权流程 resp = sess.get(url, headers=hdr, allow_redirects=True) resp.raise_for_status() # 写入文件 with open('c:/users/scott/onedrive/desktop/gamma.las', 'wb') as f: f.write(resp.content)
如果运行后还是返回登录页,可按以下步骤调整:
- 打开浏览器无痕窗口访问该下载链接,在下载触发时打开浏览器开发者工具的「网络」标签,找到对应download.aspx请求的Cookie字段,把完整Cookie复制到请求头的
Cookie参数中即可正常下载。Cookie的有效期通常有数天,到期后重新抓取一次即可。
2. 无需用户凭证无法直接调用SharePoint REST API
SharePoint REST API的所有接口默认要求身份验证,即便是公开共享的内容,调用接口也需要先获取共享链接对应的匿名访问令牌,获取流程比直接模拟浏览器下载更复杂,没有必要采用该方案。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

