【问题标题】:How to download file Using PHP that has delayed force download?如何使用延迟强制下载的 PHP 下载文件?
【发布时间】:2020-10-31 06:15:22
【问题描述】:

我的情况是,我需要从 URL 下载文件,使用像 https://somedomain.com/some-path/somefile.exe 这样的直接文件 URL 很容易

file_put_contents( $save_file_loc, file_get_contents($url_to_download);

但是当您延迟从实际打印 HTML 的 URL 强制下载以及如何区分这些 URL 时该怎么办?

示例网址:https://filehippo.com/download_mozilla-firefox-64/post_download/

编辑:在上面的 url 上,文件下载使用 JS 开始,因为我用阻塞 JS 测试并且下载没有开始。

提前感谢您的帮助。

【问题讨论】:

标签: php download file-get-contents php-curl file-put-contents


【解决方案1】:
  1. 使用file_get_contents读取URL的html
  2. 在 HTML 中查找文件的 URL。您必须访问该页面并查看源代码才能找到 URL。在您的https://filehippo.com/download_mozilla-firefox-64/post_download/ 示例中,它位于data-qa-download-url="https://dl5.filehippo.com/367/fb9/ef3863463463b174ae36c8bf09a90145/Firefox_Installer.exe?Expires=1594425587&Signature=18ab87cedcf3464363469231db54575665668c4f6&url=https://filehippo.com/download_mozilla-firefox-64/&Filename=Firefox_Installer.exe" 之间
  3. 您可能已经注意到,该页面可能已经预先批准了请求,因此如果主机使用 cookie 或其他方法进行检查,则无法保证该请求正常工作。
  4. 根据上述创建一个正则表达式以使用preg_match 提取URL
  5. 然后file_get_contents下载文件的URL。

【讨论】:

  • 是的,我相信这些下载适用于 cookie 检查。我已经尝试使用 data-qa-download-url 中的 URL,但它在新标签页上不起作用。
  • 对于cookies,你可以用curl代替stackoverflow.com/questions/1797510/…试试
  • 还要检查原始页面源代码中的downloadIframe.src = '{THE_URL_HERE}'。我相信使用上面答案中的方法会起作用。
  • 这只是一个示例 URL,对于这些不同的 URL 应该有一个通用的解决方案。我无法为不同的 URL 添加自定义逻辑 :)
  • 并非每个文件托管网站都会使用相同的方法。根据文件的交付方式,显然必须针对每个用例修改解决方案。据我所知,您正在寻找的答案不存在。
猜你喜欢
  • 2011-11-08
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2010-11-03
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多