我有一个文件链接,我想从 shell 下载它。不幸的是,URL 重定向到软件许可协议页面,需要单击“接受”按钮。当我在标准浏览器中时,这没有问题,但当我在 shell 中时,wget 只会下载 html 页面,而不是实际文件。当必须先接受条款时,有哪些选项可用于将文件下载到 shell?
具体来说,我正在查看以下 LSI 下载页面:
我确实查看了页面上的源代码并找到了以下位置的链接,但在使用 wget 时它也会拉出 eula 页面。
http://www.lsi.com/downloads/Public/SATA/SATA%20Common%20Files/3DM2_CLI-Linux_10.2.1_9.5.4.zip
到目前为止我想到的唯一选择是:
- 将其下载到另一台有浏览器的机器上,然后将其上传到只有 shell 的服务器。缓慢而痛苦。
- 安装类似 Lynx 的软件。我不确定 Lynx 是否能很好地处理下载,而且我不喜欢在生产服务器上安装额外的软件。
- 继续分析 EULA 代码以确定它是如何阻止我下载的(假设它是 javascript 而不是服务器端)。
有没有更简单的方法?
答案1
我通常只用于lynx
此。花点时间熟悉导航键。下载过程很简单,允许您选择输出位置...
然而,在这种情况下,我尝试通过 lynx 运行下载,但没有运气。
因此,只需获取生成的文件名3DM2_CLI-Linux_10.2.1_9.5.4.zip
,然后搜索替代来源那将要允许您使用 wget。最简单的方法。
答案2
对于大多数网站,您可以:
- 使用您电脑上的 Firefox 开始下载。
- 下载时右键点击并复制下载网址。取消下载。
- 将该 url 与 wget 一起使用。
这对 95% 使用类似重定向的网站都有效。
然而,该网站有一些奇怪的行为:
- 我在我的电脑上尝试了一下,它立即从该 URL 下载 - 我刚刚在同一个无线网络上通过我的手机接受了他们的 EULA。
- 从同一网络上的另一台 PC 使用 wget 下载工作正常。
- 从远程服务器使用 wget 下载获得了 EULA 页面。
由于我都是从不同的设备执行上述操作的,所以不存在 cookie 或发布参数。它们唯一的共同点是它们位于同一个 NAT 后面。
因此,我只能得出这样的结论:他们一直在跟踪已接受 EULA 的 IP 地址,只向未接受 EULA 的 IP 地址显示 EULA 页面。要从 wget 下载它 - 要么在另一台计算机上从同一个公共 IP 地址接受 EULA,要么致电 LSI 并解雇他们的网页设计师!
答案3
黑客:这是针对 LSI 的特定解决方案。只需将 source=1 添加到 url 即可。因此链接
http://www.lsi.com/downloads/Public/SATA/SATA%20Common%20Files/3DM2_CLI-Linux_10.2.1_9.5.4.zip
将更改为:
wget 命令如下:
获得http://www.lsi.com/downloads/Public/SATA/SATA%20Common%20Files/3DM2_CLI-Linux_10.2.1_9.5.4.zip?source=1-O 3DM2_CLI-Linux_10.2.1_9.5.4.zip
LSI 为什么!?
答案4
http://www.lsi.com/downloads/Public/SATA/SATA%20Common%20Files/3DM2_CLI-Linux_10.2.1_9.5.4.zip
该链接通过没有 EULA 的浏览器进入,但 wget 不起作用。。奇怪。你能把它下载到桌面,然后通过 sftp 将它发送到你的 linux 机器吗?