从 cURL 下载 OneDrive 文件,因为他们改变了 URL 的结构

Download OneDrive file from cURL since they've changed their URL's construction

这是我的问题 have.Before OneDrive 更改了 url 很容易强制从 cURL 下载文件,但现在他们已经更改了他们的URL的构造我不能用以前的替换redir的方法吗?有下载吗?这就是它们过去的构造方式:

https://onedrive.live.com/redir?resid=

为了让它立即开始下载,我们只需要用这样的下载替换 redir

https://onedrive.live.com/download?resid=

这完全解决了问题,但现在 url 是这样的:

https://1drv.ms/u/s!AsdMSpdm_dmsadMSda

所以,我的问题是如何从 cURL 下载文件,即使使用 CURLOPT_FOLLOWLOCATION 我也无法做到这一点,只有在强制下载文件时它才有效。 提前致谢!

有两种选择。执行此操作的“正确”方法是按照此处描述的详细信息 https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/shares_get?view=odsp-graph-online#encoding-sharing-urls 对完整共享 URL 进行编码,然后像这样构造一个 URL:

https://api.onedrive.com/v1.0/shares/{encodedUrl}/root/content

这将下载 URL 处共享文件的内容。选项 #2 是将 URL 拼接起来并获取以 s! 开头的路径段,并将其用于与编码 Url:

相同的位置

https://api.onedrive.com/v1.0/shares/s!.../root/content

无论哪种方式,您都可以使用 cURL 下载文件的内容。

我找到了 3 种方法来实现它..

1。跟随重定向

此选项并不总是有效,因为有时重定向的 url 还包含 !.

  1. 在浏览器中打开您的 1drv.ms link。它会将您重定向到一些大 url (1drv.com url).
  2. 复制大URL
  3. 并用在cURL后面的位置。例如:curl https://wie6yw.dm.files.1drv.com/y4mRNH415nArXijS4qtGN-bTq9plsHtfUJNq2M -L -o OUTPUTFILE.EXT

最后记得用原来的文件名重命名OUTPUTFILE.EXT

2。使用外部工具转换它

这家伙创造了一个 online tool to convert OneDrive links。 它有效,但如果你每天都这样做,这可能会很烦人。

  1. 查看您要在网络上共享的文件
  2. 单击以在 OneDrive 网站获取嵌入代码
  3. 将代码粘贴到this online tool 4.Click 获取下载 link.
  4. 在cURL.
  5. 中使用生成的下载url

3。在 PHP

中创建我自己的重定向

我使用上面@Ryan Gregg 的方法并创建了一个 converter.php 来转换 OneDrive URLs 并将用户重定向到最终文件。这样我就可以将它与 cURL.

一起使用
  1. 使用以下内容创建 php 文件(即:converter.php):
<?php
$sharedUrl = urldecode($_GET['url']);
$base64 = base64_encode($sharedUrl);
$encodedUrl = "u!" . rtrim($base64, '=');
$encodedUrl = str_replace('/', '_', $encodedUrl);
$encodedUrl = str_replace('+', '-', $encodedUrl);

$final = sprintf('https://api.onedrive.com/v1.0/shares/%s/root/content', $encodedUrl);
header('Location:' . $final, true, 302);
  1. URL 对共享的 OneDrive 进行编码 URL。如果需要,您可以使用 online tool

  2. 在 curl 中调用您的 php 文件并将编码的 URL 作为参数传递给 ?url=。例如:curl http://localhost/converter.php?url=https%3A%2F%2F1drv.ms%2Fu%2Fs%21ApzSTOgc2rAs4d2olMS%3Fe%3DrZIUN -L -o OUTPUTFILE.EXT。 将 OUTPUTFILE.EXT 替换为原始文件名。