使用 wget 或 curl 从 microsoft 下载 Windows ISO

使用 wget 或 curl 从 microsoft 下载 Windows ISO

目的:通过命令行直接下载官方Win10_1909 iso到linux中

来源:https://www.microsoft.com/en-in/software-download/windows10ISO

选择版本和语言后,您将获得如下64位链接,24小时内有效

https://software-download.microsoft.com/pr/Win10_1909_English_x64.iso?t=77395428-650e-4e5c-8bcc-97abca347eaa&e=1583937294&h=2b05fad63d3a6e2a0c4a20cb49f34e7c

这可以通过任何 GUI 浏览器或任何平台正常工作,但我们需要在 Linux 盒子中使用它

  • linux服务器当然少了gui(不打算安装gui)
  • wget/curl 导致禁止下载 html 文件
  • 在 wget/curl 中将用户代理更改为 firefox 或添加自定义有效负载:curl -d '{"t": 77e897e2-a32c-419c-8f18-54770dbb5a15,"e": 1583942596,"h": 595f691df8f7e4088d24b6cc37077d1a}' 并请求。 iso 文件返回禁止页面
  • 尝试了基于 Linux 的下载管理器,如 aria 和 axel,它也失败了,禁止

如何仅通过命令行来完成此任务?

答案1

这是被禁止的,因为 url 中存在由 shell 解释的特殊字符。有例如“?”和 '&'。现在看一下您的示例网址:

curl --location --remote-name https://software-download.microsoft.com/pr/Win10_1909_English_x64.iso?t=77395428-650e-4e5c-8bcc-97abca347eaa&e=1583937294&h=2b05fad63d3a6e2a0c4a20cb49f34e7c

这会:

  1. 启动一个子 shell,它实际上执行了以下操作:
curl --location --remote-name https://software-download.microsoft.com/pr/Win10_1909_English_x64.iso?t=77395428-650e-4e5c-8bcc-97abca347eaa
  1. 启动一个子 shell,其中变量“e”被分配值“1583937294”
  2. 在您当前的 shell 环境中,将有一个变量“h”,其值分配为“2b05fad63d3a6e2a0c4a20cb49f34e7c”

如何修复它? - 简单,只需在 url 两边添加单引号即可:

卷曲 --location --remote-name 'https://software-download.microsoft.com/pr/Win10_1909_English_x64.iso?t=77395428-650e-4e5c-8bcc-97abca347eaa&e=1583937294&h=2b05fad63d3a6e2a0c4a20cb49f34e7c'

答案2

我终于找到了解决方案,Firefox 中不需要扩展。

获取收到的 URL 后,在 Firefox 中打开一个新选项卡并打开开发人员工具 (F12)。切换到网络选项卡并输入下载 URL。当提示您下载时点击取消。

现在 Network 下会有一个 GET 请求;右键单击它并选择Copy > Copy as cURL。将这个巨大的字符串粘贴到您的终端中并添加-o [/path/filename]以实际将文件保存在某处,而不是将其转储到 STDOUT。就是这样!


在基于 Chromium 的浏览器中,在 Microsoft 下载页面上创建“32 位下载”和“64 位下载按钮”后。打开开发人员工具,然后切换到“网络”选项卡(它应该为空)。单击 32 或 64 位下载按钮。它应该会弹出一个另存为对话框,将其取消。右键单击“网络”选项卡中列出的新 url,复制->复制为 Curl 然后将其粘贴到终端窗口中,并附加值-o [/path/filename]。 (例如-o Win10_20H2_v2_English.iso)它应该开始下载。

答案3

我制作了一个名为 Mido 的工具来自动化整个过程:

https://github.com/ElliotKillick/Mido

相关内容