下载文件时选 wget 还是 curl 取决于需求:wget 适合自动重定向、断点续传、递归下载;curl 更适合发 api 请求、模拟复杂 http 行为。

wget 和 curl 到底该用哪个?
下载文件时选 wget 还是 curl,取决于你是否需要“自动处理重定向 + 断点续传 + 递归下载”这类开箱即用的能力。如果只是取一个 URL 的内容、发个带 header 的请求、或者要对接 API,curl 更直接;如果要镜像网页、批量下载、或在脚本里确保下载不因网络抖动失败,wget 更省心。
常见错误现象:curl https://example.com/file.zip 直接输出二进制乱码到终端,而不是保存成文件;wget 遇到 302 重定向却没加 -L,结果下回来的是 HTML 登录页。
-
wget默认把响应体写入文件(同名),curl默认输出到 stdout,必须显式加-o filename或-O -
wget自带重试(--tries=3)、断点续传(-c)、递归(-r);curl这些都得靠组合参数或外部工具 -
curl支持更多协议(SFTP、MQTT、LDAP),也更容易模拟复杂请求(如带 cookie、多段 form-data)
下载文件时必须加的参数有哪些?
不加关键参数,很可能下错、下空、或下一半就停。尤其注意重定向和文件名逻辑。
-
wget -L:必须加,否则遇到 301/302 会停止在跳转页,返回 HTML 而非目标文件 -
wget -O filename.zip:强制指定文件名,避免 URL 中有 query 参数(如?v=1.2.3)导致生成奇怪的文件名 -
curl -L -o filename.zip:-L处理重定向,-o指定输出文件;漏掉任一个都可能得到空文件或 stdout 冲突 -
curl -f:让 HTTP 4xx/5xx 状态码触发非零退出码,方便脚本判断失败(wget默认就如此)
下载大文件或不稳定网络下怎么防中断?
默认行为都不保证可靠:wget 不加 -c 会覆盖已存在的同名文件;curl 完全不支持断点续传,除非你自己算 range 并加 -H "Range: bytes=..."。
-
wget -c -L:继续未完成的下载,前提是服务端支持Accept-Ranges(绝大多数 CDN 和静态服务器都支持) -
wget --timeout=30 --tries=5:单次超时 30 秒,总共重试 5 次,适合弱网环境 -
curl没有内置断点续传,但可配合stat和-z做简单校验(比如只在本地文件比服务器旧时才重新下载) - 注意:
wget -c对重命名过的文件无效,必须保持原文件名一致才能续传
HTTPS 下载常见证书错误怎么快速绕过?
内网服务、自签名证书、或系统 CA 仓库陈旧(比如某些 Docker Alpine 镜像)时,wget 和 curl 都会报 SSL 验证失败,但绕过方式不同,风险也不同。
-
wget --no-check-certificate:跳过证书验证,简单粗暴,仅限可信内网环境 -
curl -k(或--insecure):效果同上,但更常见于调试 - 更安全的做法是把证书加进系统信任库:
cp my-ca.crt /usr/local/share/ca-certificates/ && update-ca-certificates - 别用
export CURL_CA_BUNDLE=...临时改路径——容易被忽略,且不生效于所有 curl 版本
真正麻烦的不是绕过证书,而是有些老版本 wget(如 CentOS 7 自带的 1.14)根本不支持 TLS 1.2+,连现代网站都连不上,这时候只能升级或换 curl。










