从 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 还包含 !
.
- 在浏览器中打开您的 1drv.ms link。它会将您重定向到一些大 url (1drv.com url).
- 复制大URL
- 并用在cURL后面的位置。例如:
curl https://wie6yw.dm.files.1drv.com/y4mRNH415nArXijS4qtGN-bTq9plsHtfUJNq2M -L -o OUTPUTFILE.EXT
最后记得用原来的文件名重命名OUTPUTFILE.EXT
。
2。使用外部工具转换它
这家伙创造了一个 online tool to convert OneDrive links。
它有效,但如果你每天都这样做,这可能会很烦人。
- 查看您要在网络上共享的文件
- 单击以在 OneDrive 网站获取嵌入代码
- 将代码粘贴到this online tool
4.Click 获取下载 link.
- 在cURL.
中使用生成的下载url
3。在 PHP
中创建我自己的重定向
我使用上面@Ryan Gregg 的方法并创建了一个 converter.php 来转换 OneDrive URLs 并将用户重定向到最终文件。这样我就可以将它与 cURL.
一起使用
- 使用以下内容创建 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);
URL 对共享的 OneDrive 进行编码 URL。如果需要,您可以使用 online tool。
在 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 替换为原始文件名。
这是我的问题 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 还包含 !
.
- 在浏览器中打开您的 1drv.ms link。它会将您重定向到一些大 url (1drv.com url).
- 复制大URL
- 并用在cURL后面的位置。例如:
curl https://wie6yw.dm.files.1drv.com/y4mRNH415nArXijS4qtGN-bTq9plsHtfUJNq2M -L -o OUTPUTFILE.EXT
最后记得用原来的文件名重命名OUTPUTFILE.EXT
。
2。使用外部工具转换它
这家伙创造了一个 online tool to convert OneDrive links。 它有效,但如果你每天都这样做,这可能会很烦人。
- 查看您要在网络上共享的文件
- 单击以在 OneDrive 网站获取嵌入代码
- 将代码粘贴到this online tool 4.Click 获取下载 link.
- 在cURL. 中使用生成的下载url
3。在 PHP
中创建我自己的重定向我使用上面@Ryan Gregg 的方法并创建了一个 converter.php 来转换 OneDrive URLs 并将用户重定向到最终文件。这样我就可以将它与 cURL.
一起使用- 使用以下内容创建 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);
URL 对共享的 OneDrive 进行编码 URL。如果需要,您可以使用 online tool。
在 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 替换为原始文件名。