用 curl -o 下载网页必须加 -L 才能获取跳转后的源码,否则可能保存 301/302 响应;-o 比重定向 > 更可靠,支持断点续传、自动跳转和显式命名,而 -O 在新版中默认不加扩展名,易出错。

直接用 curl -o 就能保存,但不加 -L 很可能拿到 301/302 跳转页而非真实源码,这是最常踩的坑。
curl -o 和重定向 > 的区别
两者都能把响应写进文件,但行为不同:
-
curl -o backup.html https://example.com:由 curl 控制写入,支持断点续传、进度反馈,且能配合-L自动跟随跳转 -
curl https://example.com > backup.html:shell 重定向,curl 不知道目标是文件,遇到跳转时只保存跳转响应(比如一段 HTML 提示“301 Moved Permanently”),不是你想要的最终页面源码 - 如果 URL 末尾带斜杠(如
https://site.com/blog/),-O(大写 O)会失败或生成空文件;必须用-o显式指定文件名
必须加 -L 才能拿到真实页面源码
很多网站默认启用 HTTPS 强制跳转或路径重定向。不加 -L,curl 默认停止在第一个响应,常见现象是:
- 文件里只有
<html><body>301 Moved Permanently</body></html> - 返回 403 错误(因未携带 User-Agent 被拦截),此时可补
-A "Mozilla/5.0" - HTTPS 证书异常(尤其内网或测试站),加
-k跳过验证(仅限可信环境)
稳妥写法:curl -L -A "Mozilla/5.0" -o page.html https://example.com
立即学习“前端免费学习笔记(深入)”;
保存到指定目录要注意路径存在性
curl -o ./backup/page.html https://example.com 不会自动创建 backup/ 目录,报错 Failed writing received data to disk/application。
- 先运行
mkdir -p ./backup(-p确保嵌套目录也创建) - Windows PowerShell 中对应命令是
New-Item -ItemType Directory -Path ./backup -Force - 路径中避免空格和中文,否则需用引号包裹整个 URL,例如:
curl -o "./my backup/index.html" "https://example.com"
curl 8.10.0+ 的 -O 行为变化容易被忽略
新版 curl -O https://example.com/ 不再报错,而是生成 curl_response 文件——它没扩展名,打开可能是乱码或无法渲染的二进制内容。
- 这不是 bug,是设计:curl 无法判断响应类型,硬加
.html可能误导(比如实际返回的是 JSON 或图片) - 如果你明确要 HTML,就别依赖
-O,坚持用-o xxx.html - 想确认实际保存的文件名?加
-w "%{filename_effective}\n",它会输出最终使用的文件名



















