新来的运维问了一个问题,装了小包的镜像,里面只有wget,老脚本用的都是curl,他想知道重写还是装回去,几分钟能说明白。
curl是瑞士军刀,wget是下载专精
curl啥都干,GET、POST、传文件、调接口,还能改请求头、带证书、测耗时。wget做得很窄,主要就是把文件拉下来,而且拉得稳。
curl -L -o app.tar.gz https://example.com/app.tar.gzwget -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=tomwget -r -np -k https://docs.example.com/manual/第一条wget写起来很别扭,第二条curl根本没有整站镜像这种玩法,各回各家。
脚本里选哪个更省事
写安装脚本、CI拉依赖,很多基础镜像自带curl,macOS也自带,Windows 10以后也有curl命令。要写跨平台脚本,curl兼容性更好。
后台挂下载、弱网传大文件,wget更稳,它默认会重试20次,curl默认失败就退了,当然也能加--retry参数补回来。
一句话取舍:天天调接口的留curl,经常拉包拉镜像的留wget,磁盘不差那几MB,两个都装最省心。