【问题标题】:Programatically download files from public sharepoint directory以编程方式从公共共享点目录下载文件
【发布时间】:2019-05-15 21:26:06
【问题描述】:

我想列出和下载公共 Sharepoint 目录中的文件。 我有格式链接 https://xxx.sharepoint.com/:f:/s/site_name/long_id?e=shorter_id
重定向到
https://xxx.sharepoint.com/sites/site_name/Shared%20Documents/Forms/AllItems.aspx?cid=some_id&RootFolder=encoded_path&FolderCTID=another_is

对于非公开文件,我使用Office365-REST-Python-Client 和真实帐户凭据,但此库不允许在没有身份验证的情况下使用。

对于相对简单的任务,我可以使用裸 REST API,但由于我是 Sharepoint 新手,我可以使用一些提示从哪里开始查找。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 我上面提到的 Python 库,但没有身份验证它就无法工作。我尝试发送官方文档Working with folders and files with REST 中显示的裸请求,但如果没有身份验证标头,它也无法正常工作。
  • 你能分享你的代码吗?
  • 我之前提到的库没有身份验证凭据就无法工作。只是出于好奇,我尝试传递空字符串而不是登录/传递,但怀疑它不起作用。裸请求是这样的http "https://xxx.sharepoint.com/sites/site_name/_api/web/GetFolderByServerRelativeUrl('path of directory')"(我正在使用 http-pie)并收到 403 错误,错误消息提示我需要授权请求。

标签: python sharepoint office365api


【解决方案1】:

我认为可能无法使用 Sharepoint API 进行存档(至少找不到方法),但可以通过处理裸请求来实现。
Sharepoint 似乎在幕后执行了一些自动授权,并执行了一些附加授权 cookie 的重定向。
您只需为所有请求使用一些真正的User-Agent

步骤如下:

  • 获取https://xxx.sharepoint.com/:f:/s/site_name/long_id?e=shorter_id 您将收到 301 授权端点
  • 获取https://xxx.sharepoint.com/sites/site_name/_layouts/15/guestaccess.aspx?e=shorter_id&share=long_id。这将设置一些 cookie 和 302 到您的目的地
  • GET https://xxx.sharepoint.com/sites/site_name/Shared%20Documents/path_to_dir?cid=some_id 这个会返回真实数据。您必须使用上一步中的身份验证 cookie。
  • 作为响应,查找带有 javascript ListData 对象的 script 标记。它将包含描述所有文件的结构。您对FileRef 属性感兴趣。
  • GET https://xxx.sharepoint.com/sites/site_name/_layouts/15/download.aspx?SourceUrl=FileRef 它将下载您的数据。记住 auth 标头。

它不是最理想的,但对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-09
    • 2023-03-31
    • 2013-12-12
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多