我在 Amazon Linux 上使用 bash。
当我在浏览器中访问以下网址时,https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US,我得到一个文件,firefox-56.0.1.tar.bz2。然而,当我使用 wget 时,下载的文件的标题中有一个“index.html”,即使它看起来像同一个文件。所以我尝试了
wget -r --no-parent --reject "index.html*" -nH --cut-dirs=7 "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US"
但现在没有文件被下载。如何使用 wget(或其他命令行工具)下载文件,并让文件的标题与我在浏览器中访问该 URL 时的标题相同?
答案1
在这种情况下,您希望信任标头中发送的服务器名称,如果没有该指令,wget
将使用 URL 中的文件名...
wget "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US" --trust-server-names
当然,为了使其工作,所有服务器都需要发送正在发送/生成的任何文件的文件名。有些脚本不会这样做 - 如果是这种情况,您仍然会得到实际上是该文件的“index.html”。
在这种情况下,您要做的就是使用-O
输出选项,并在最后指定所需的文件名
wget "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US" -O latest-firefox.tar.bz2
当然,您需要知道它是什么文件类型等,才能使这部分工作。
答案2
您可以安装克利杰特的插件firefox
。按下链接后,它将curl
在 下生成一个命令Download with cURL
。在这种情况下,它会是这样的:
curl --header 'Host: ftp.mozilla.org' --header 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0' --header 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' --header 'Accept-Language: en,de;q=0.5' --header 'Cookie: optimizelyEndUserId=oeu1495381484085r0.16482844406273445; optimizelySegments=%7B%22245984388%22%3A%22false%22%2C%22246002457%22%3A%22search%22%2C%22246073289%22%3A%22none%22%2C%22246073290%22%3A%22ff%22%7D; optimizelyBuckets=%7B%7D' --header 'DNT: 1' --header 'Connection: keep-alive' --header 'Upgrade-Insecure-Requests: 1' 'https://ftp.mozilla.org/pub/firefox/releases/56.0.1/linux-x86_64/en-US/firefox-56.0.1.tar.bz2' -o 'firefox-56.0.1.tar.bz2' -L
答案3
简单地与curl
工具:
curl -Os "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US/firefox-56.0.1.tar.bz2"
-O
,--remote-name
将输出写入本地文件,其名称类似于我们获得的远程文件。 (仅使用远程文件的文件部分,路径被切断。)