当我在浏览器中提供网址(http://192.168.150.41:8080/filereport/31779/json/
)时,它会自动将文件下载为31779_report.json
。
现在使用我试图使用curl
下载文件,但是我收到以下错误。
$ curl -O http://192.168.150.41:8080/filereport/31779/json/
curl: Remote file name has no length!
curl: try 'curl --help' or 'curl --manual' for more information
使用“-L
”开关时,我会显示JSON内容,但文件未保存。
$curl -L http://192.168.150.41:8080/filereport/31779/json/
{
.....
.....
}
如何使用cURL / wget下载确切文件“31779_report.json
”?
我不希望将内容手动重定向(>
)到文件(31779_report.json
)。
有什么建议吗?
答案 0 :(得分:1)
curl的-O标志尝试使用文件的远程名称,但由于您的URL模式不以文件名结尾,因此无法执行此操作。 -o标志(小写o)可用于手动指定文件名,而不像这样重定向STDOUT:
curl <address> -o filename.json
您可以使用awk手动构建所需的文件名格式。例如:
URL=http://192.168.150.41:8080/filereport/31779/json/
file_number=$(echo $URL | awk -F/ '{print $(NF-2)}')
file_name="${file_number}_report.json"
curl -L "$URL" -o "$file_name"
希望这更有帮助。
答案 1 :(得分:1)
wget --content-disposition
帮了我 (https://askubuntu.com/a/77713/18665)
$ wget --content-disposition https://www.archlinux.org/packages/core/x86_64/lib32-glibc/download/
...
Saving to: 'lib32-glibc-2.33-4-x86_64.pkg.tar.zst'
与卷曲相比:
$ curl -LO https://www.archlinux.org/packages/core/x86_64/lib32-glibc/download/
curl: Remote file name has no length!
curl: (23) Failed writing received data to disk/application
没有 --content-disposition
的 wget:
$ wget https://www.archlinux.org/packages/core/x86_64/lib32-glibc/download/
...
Saving to: 'index.html'