从公共共享点目录以编程方式下载文件

时间:2019-05-13 12:25:58

标签: python sharepoint office365api

我想列出并从公共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新手时,可以使用一些技巧来开始查找。

1 个答案:

答案 0 :(得分:0)

我认为可能无法使用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到您的目的地
  • 获取https://xxx.sharepoint.com/sites/site_name/Shared%20Documents/path_to_dir?cid=some_id,这将返回真实数据。您必须使用上一步中的身份验证Cookie。
  • 作为响应,请查找带有JavaScript script对象的ListData标签。它将包含描述所有文件的结构。您对FileRef属性感兴趣。
  • 获取https://xxx.sharepoint.com/sites/site_name/_layouts/15/download.aspx?SourceUrl=FileRef,它将下载您的数据。记住有关auth标头的信息。

它不及最优,但对我有用。