坑边闲话wgetcurl 在命令行下载文件时很常见。然而,curl 的诸多参数很复杂。

curl 发展自 1998 年,算是一个相对年轻的工具。它本身就是一个迷你的浏览器,可以请求 HTTP 内容,因此下载文件也不在话下。

此外,curl 还是一个开发库,它提供了若干个在 HTTP 开发时需要用到的组件。

-L 重定向·

如果页面发生重定向,则 curl 也会继续请求重定向后的内容。

重定向是个危险的操作,因此如果包含发送 secret, curl 不会将 secret 发送给重定向后的服务器。

可通过 --max-redirs 设置重定型的深度。

-o·

--output,将网络返回的数据写入文件,而非写入到 stdout.

由于 curl 支持解析自定义脚本,因此用 -o 参数时可以编程。

-O·

--remote-name

-O 经常用来做临时下载,它会将远程资源的文件名解析出来,并以此创建本地文件。

--output-dir·

-O-o 指定时,该参数才生效。

1
curl --output-dir "/tmp" -O https://example.com

这个选项用来指定输出的目录

最佳实践

1
curl -LO https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage --output-dir /tmp

在这个案例中:

  • 允许重定向
  • 使用远程文件名
  • 将输出定向到 /tmp 目录

-J·

--remote-header-name

这是个不太常用的选项,它涉及到 HTTP 的一些细节。比如我们在请求资源时,Server 会使用 HTTP 报文给我们反馈,其中头部会包含很多字段,其中一个就是 Content-Disposition,即内容处理方式。

并非所有的 HTTP 返回的头部里都包含 Content-Disposition 字段,因此这个选项不是很常用。