curl -o 指定本地文件名,-o 用 url 原始文件名;需加 -l 跟跳转,-ss 静默但报错;wget 用 -p -k -nd 才能本地正常浏览;注意 user-agent、referer、断点续传及查询参数导致的文件名问题。

直接用 curl 或 wget 就能完成,不用装额外工具,也不需要图形界面——但选哪个、怎么写参数,决定了你能不能拿到真正想要的内容(比如带图片的完整页面,还是纯 HTML 文本,或者干脆连重定向都跳不过去)。
curl -o 和 curl -O 的区别必须分清
curl -o 是你指定本地文件名,curl -O 是自动用 URL 里的文件名(比如 https://example.com/index.html 会存成 index.html)。如果 URL 没有显式文件后缀(如 https://example.com/),-O 会失败或存成奇怪的名字(比如 index.html?ref=1 变成 index.html?ref=1,Linux 文件系统允许,但难处理)。
- 要保存为固定名字(推荐日常使用):
curl -o page.html https://example.com - 要按远端原始名保存(适合下载已知路径的资源):
curl -O https://example.com/style.css - 加
-L才能跟随 301/302 跳转,否则遇到重定向就停住并报错(常见于 HTTPS 自动跳转或短链接) -
-sS组合更实用:静默错误但保留失败提示(-s静音进度,-S失败时仍输出错误)
wget 递归下载网页时 -p -k -nd 这三个参数常被漏掉
单纯 wget https://example.com 只下载 HTML 文件,页面打开后全是挂掉的图片和 CSS 链接。要让页面在本地“能看”,得补全依赖资源并修复路径。
-
-p:下载 HTML 引用的所有资源(CSS、JS、图片等) -
-k:把 HTML 里的远程链接(如https://example.com/style.css)改成本地相对路径(如style.css) -
-nd:避免创建嵌套目录(默认会建example.com/子目录),所有文件平铺到当前目录,方便管理 - 不加
-r(递归)的话,-p和-k也只作用于首页;加了-r后要注意控制深度(-l 2)和域名范围(-D example.com),否则可能顺着外链爬走
遇到 403 或空响应?检查 User-Agent 和 Referer
很多网站会拦截默认 curl/wget 请求头,返回空内容或 403。这不是网络问题,是服务端主动拒绝。
- 加
-A "Mozilla/5.0 (X11; Linux x86_64)..."模拟浏览器(curl) - 或用
--user-agent="..."(wget) - 部分站点还校验
Referer,可加-e "https://example.com/"(wget)或手动构造 header:-H "Referer: https://example.com/"(curl) - 注意:有些网站还会检查 Cookie 或 JS 渲染,这时命令行工具无解,得换
playwright或puppeteer
下载大文件或不稳定网络下别忘了断点续传
wget -c 是成熟可靠的断点续传机制,curl 没有内置等效参数——它靠 -C -(大写 C 加短横)实现,但要求服务器支持 Range 请求且本地已有部分文件。
-
wget -c https://example.com/big.iso:安全、通用、自动识别已下载部分 -
curl -C - -o big.iso https://example.com/big.iso:必须确保big.iso已存在且不为空,否则报错退出 -
wget --limit-rate=2m可防占满带宽,curl没有等效限速参数(需用trickle等外部工具包裹)
最易被忽略的是:URL 中的查询参数(如 ?v=1.2.3)会让 wget -O 或 curl -O 生成带问号的文件名,而某些 shell 或文件系统对这类名字处理异常;手动用 -o 指定干净文件名才是稳妥做法。











