Curl

使用 wget 或 curl 從 microsoft 下載 Windows ISO

  • June 8, 2021

目的:通過命令行直接下載官方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,它也失敗了,禁止

如何僅通過命令行完成此操作?

我終於找到了一個解決方案,並且在 Firefox 中不需要擴展。

獲得您收到的 URL 後,在 Firefox 中打開一個新選項卡並打開開發者工具 (F12)。切換到網路選項卡並輸入下載 URL。當它提示您下載時點擊取消。

現在 Network 下會有一個 GET 請求;右鍵點擊它並選擇Copy > Copy as cURL. 將這個龐大的字元串粘貼到您的終端並添加-o [/path/filename]以實際將文件保存在某處,而不是將其轉儲到 STDOUT。就是這樣!


在基於 Chromium 的瀏覽器中,在 Microsoft 下載頁面上創建“32 位下載”和“64 位下載按鈕”後。打開開發者工具,然後切換到網路選項卡(它應該是空的)。點擊 32 或 64 位下載按鈕。它應該會彈出一個另存為對話框,取消它。右鍵點擊“網路”選項卡中列出的新 url,複製->複製為捲曲 然後將其粘貼到終端視窗中,並附加該-o [/path/filename]值。(例如-o Win10_20H2_v2_English.iso)它應該開始下載。

這是被禁止的,因為 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 周圍添加單引號:

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'

引用自:https://unix.stackexchange.com/questions/572456