从 OneDrive for Business 下载文件时,wget 或 curl 给出 403:禁止访问

从 OneDrive for Business 下载文件时,wget 或 curl 给出 403:禁止访问

我正在尝试为客户下载软件,该软件位于我的企业 OneDrive 帐户中。通过 OneDrive 的 Web 界面,我执行以下操作:

  • 右键单击文件并选择共享
  • 项目清单
  • 将链接设置更改为“任何知道链接的人”
  • 保留“允许编辑”复选框
  • 复制链接

这给了我一个这样的链接:

https://company-my.sharepoint.com/:u:/g/personal/path/lKuaRC_jkBwW9IJo4rOmN8tZju8mePVw?e=lRErX4

当我浏览该链接时,我会被重定向到一个下载页面,在那里我会看到一个“下载”按钮,因此我点击下载,打开下载中心并选择“复制下载链接”,这样我就有了直接下载链接。当我将该链接复制到新的私人窗口时,我可以选择直接下载文件。

当我使用 curl 或 wget 使用该链接时,仍然会收到 403:FORBIDDEN

例如,这是我使用的命令:

wget https://company-my.sharepoint.com/personal/path/to/the/file.aspx?SourceUrl=%2Fpersonal%2Fme%5Fcompany%5Fcountry%2FDocuments%2Fpath%2FSoftware%2FDownloadPackageLocationLinuxSP16%2Etar

输出:

Resolving company-my.sharepoint.com (company-my.sharepoint.com)... aa.bbb.cc.d
Connecting to company-my.sharepoint.com (company-my.sharepoint.com)|aa.bbb.cc.d|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden
2020-01-24 14:46:48 ERROR 403: Forbidden.

答案1

Google Chrome 和 Mozilla Firerfox 都提供了专门为 cURL 复制下载链接的选项。此选项将生成 cURL,其中包含所有必需的信息,例如用于从侧面下载内容的用户代理。为此,

  1. 在任一浏览器中打开该 URL。
  2. Ctrl使用++打开开发者选项ShiftI
  3. 转到“网络”选项卡。
  4. 现在点击下载。不需要保存文件。我们只需要浏览器从服务器请求文件时的网络活动。
  5. 将出现一个新条目,其内容如下“下载.aspx?...“。
  6. 右键单击该复制 → 复制为 cURL
  7. 将复制的内容直接粘贴到终端中,并附加到--output file.extension保存内容中文件扩展名因为终端无法显示二进制数据。

命令示例:

curl 'https://company-my.sharepoint.com/personal/path/_layouts/15/download.aspx?SourceUrl=
%2Fpersonal%2Fsome%5Fpath%5Fin%2Ffile' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux 
x86_64; rv:73.0) Gecko/20100101 Firefox/73.0' -H 'Accept: text/html,application/xhtml+xml,
application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' 
--compressed -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Referer: https://company-my
.sharepoint.com/personal/path/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fagain%5Fa%5Fpath%2F
file&parent=%2Fpersonal%2Fpath%5Fagain%5Fin%2&originalPath=somegibberishpath' -H 
'Cookie: MicrosoftApplicationsTelemetryDeviceId=someid; 
MicrosoftApplicationsTelemetryFirstLaunchTime=somevalue; 
rtFa=rootFederationAuthenticationCookie; FedAuth=againACookie; CCSInfo=gibberishText; 
FeatureOverrides_enableFeatures=; FeatureOverrides_disableFeatures=' -H 
'Upgrade-Insecure-Requests: 1' -H 'If-None-Match: "{some value},2"' -H 'TE: Trailers' 
--output file.extension

进一步阅读:为什么 curl 和 wget 会导致 403 禁止?

相关内容