新来的运维问了一个问题,装了小包的镜像,里面只有wget,老脚本用的都是curl,他想知道重写还是装回去,几分钟能说明白。

curl是瑞士军刀,wget是下载专精

curl啥都干,GET、POST、传文件、调接口,还能改请求头、带证书、测耗时。wget做得很窄,主要就是把文件拉下来,而且拉得稳。

curl -L -o app.tar.gz https://example.com/app.tar.gz
wget -c https://example.com/app.tar.gz

看这两条命令,下载断点续传时wget一个-c就行,curl要自己记-L跟跳转、-o指定输出,调接口时正好反过来,wget发个JSON要写老长。

调接口用curl,拉大文件用wget

  • curl拿手:接口调试、发POST、带token、上传文件、看响应头和耗时
  • wget拿手:整站镜像、后台下载、断点续传、限速、递归拉目录
  • 都不擅长:多线程加速,两者默认都是单线程,想快得用aria2那类
curl -X POST https://api.example.com/login -d user=tom
wget -r -np -k https://docs.example.com/manual/

第一条wget写起来很别扭,第二条curl根本没有整站镜像这种玩法,各回各家。

脚本里选哪个更省事

写安装脚本、CI拉依赖,很多基础镜像自带curl,macOS也自带,Windows 10以后也有curl命令。要写跨平台脚本,curl兼容性更好。

后台挂下载、弱网传大文件,wget更稳,它默认会重试20次,curl默认失败就退了,当然也能加--retry参数补回来。

一句话取舍:天天调接口的留curl,经常拉包拉镜像的留wget,磁盘不差那几MB,两个都装最省心。