curl / wget 速查表 - 命令行文件下载与 HTTP 请求大全

面向在纯命令行环境调接口、下载文件、排查 HTTP 问题的工程师。curl 与 wget 虽常被并列,定位不同:curl 是 HTTP 客户端,适合调接口、带方法/Header/Cookie;wget 偏文件抓取,断点续传和递归镜像更顺手。读完能为每种任务选对工具,用 wget -c 续传大文件,用 curl -v/-w 定位接口问题,并处理代理与认证。

Web 服务·共 34 条命令·最后更新 2026-08-02
curlwget下载http命令行

基础请求 Requests 6

curl https://api.test
curl 输出响应体到 stdout
curl -O https://x/file.zip
curl 按原文件名保存(-O 大写)
curl -o out.html https://x
curl 保存到指定文件名
wget https://x/file.zip
wget 默认按原文件名下载
wget -O out.html https://x
wget 保存到指定文件名
curl -I https://x
curl 只取响应头(HEAD)

请求方法 Method 5

curl -X POST https://x
curl 指定请求方法
curl -d 'a=1&b=2' https://x
curl POST 表单数据(默认 application/x-www-form-urlencoded)
curl -d @body.json https://x
curl 从文件读取请求体
curl -H 'Content-Type: application/json' -d '{"a":1}' https://x
curl POST JSON
curl -T file.zip https://x/upload
curl 上传文件(PUT)

下载与续传 Download 5

curl -C - -O https://x/big.iso
curl 断点续传
wget -c https://x/big.iso
wget 断点续传(-c)
wget -r -np -l 2 https://x/dir/
wget 递归下载(限制层级)
curl -L https://x
curl 跟随重定向(-L)
wget --mirror -p --convert-links https://x
wget 镜像整站并本地化链接

认证与代理 Auth & Proxy 4

curl -u user:pass https://x
curl 基础认证
curl -x http://proxy:8080 https://x
curl 走 HTTP 代理
wget -e use_proxy=yes -e http_proxy=http://proxy:8080 https://x
wget 走代理
curl -k https://x
curl 跳过 TLS 证书校验(不安全)

调试与排错 Debug 5

curl -v https://x
curl 详细过程(含请求/响应头)
curl -s -o /dev/null -w "%{http_code}" https://x
curl 只取 HTTP 状态码
curl -w "@curl-format.txt" https://x
curl 用格式文件输出计时/指标
wget -S https://x
wget 打印响应头
wget --debug https://x
wget 调试模式

curl vs wget 对照 4

上传文件
curl 强(支持 PUT/POST 任意体);wget 较弱
递归镜像整站
wget 强(--mirror);curl 需手动脚本
默认输出
curl 打到 stdout;wget 直接落盘
易用性
wget 下载开箱即用;curl 调试/接口更灵活

命令示例

构造一次正确的 JSON POST 请求

curl -H 'Content-Type: application/json' -d '{"a":1}' https://x

请求体较大时改用 curl -d @body.json 从文件读取,避免命令行长度限制与引号转义问题。响应中的 a 字段能反证服务端确实按 JSON 解析而非当表单处理。

输出

{"ok":true,"received":{"a":1}}

只要状态码,把响应体丢掉

curl -s -o /dev/null -w "%{http_code}" https://x

适合放进健康检查或重定向循环里反复探测。-o /dev/null 是关键,漏掉它响应体会直接刷屏;-w 的格式串还能扩展成 content_type、size_download、time_total 等指标。

输出

204

看握手细节:curl -v 揭示重定向链

curl -v https://x

301 出现在这里说明 curl 没有自动跟随跳转——它默认停在第一跳,需要加 -L 才会继续。反过来 wget 默认会跟随,这也是很多「curl 卡住、wget 能下」困惑的来源。

输出

*   Trying 93.184.216.34:443...
* Connected to x (93.184.216.34) port 443
> GET / HTTP/2
> Host: x
> User-Agent: curl/8.5.0
> Accept: */*
< HTTP/2 301
< location: https://www.x/
* Connection #0 to host x left intact

断点续传与递归抓取的两种写法

curl -C - -O https://x/big.iso wget -c https://x/big.iso wget -r -np -l 2 https://x/dir/

curl 侧 -C - 里的减号不可省略,它代表「以本地文件当前长度作为断点偏移」;-O 大写才会用服务器文件名。递归抓取里 -np 不下载父目录索引页,-l 2 限制层级,避免一次把整站拖下来。

常见坑与注意事项

  • curl -k 跳过 TLS 证书校验,只应在自签名或调试环境临时使用;写进脚本或 CI 里等于让中间人可以读写全部流量。
  • curl -b/-c 直接读写 cookie.txt,文件里是完整会话凭据;别提交进版本库,也别在共享机器上长期留存。
  • curl -u user:pass 与 -H 里带 Authorization 的命令行会进入 shell 历史,需要保密时改用配置文件或从环境读取。
  • curl 默认不跟随重定向,跳转类接口必须加 -L,否则你拿到的是 301/302 页面而不是最终内容。
  • wget --mirror 会镜像整站,递归无上限时可能拉下数 GB 数据;对公网站点务必加 -l 限制层级,并确认对方站点条款允许。

提示

  • 下载大文件优先用续传:curl -C - -O 或 wget -c,网络断了不重来。
  • curl 默认不跟随重定向,要加 -L;wget 默认跟随。
  • 只取状态码排查服务:curl -s -o /dev/null -w "%{http_code}"。
  • POST JSON 时必须带 -H "Content-Type: application/json",否则服务端按表单解析。

常见问题

curl 和 wget 该怎么选?看场景还是看个人偏好?

有明确分工。curl 是 HTTP 客户端,强项是构造任意请求:自定义方法、任意请求头、任意请求体、上传文件、输出格式化的计时指标都靠它,所以调接口和排查问题基本都用 curl。wget 偏文件抓取,断点续传和递归镜像开箱即用,wget -c 续传大文件、wget --mirror 镜像整站都是一行搞定,curl 做同样的事要自己拼脚本。判断标准很简单:要构造请求用 curl,要把一批文件抓下来用 wget。

大文件下载中断了,curl 和 wget 分别怎么续传?

wget 用 wget -c,它会向服务端发 Range 请求,已有的部分不重下。curl 侧要写成 curl -C - -O,大小写和符号都不能省:-C - 表示从已存在的本地文件长度继续,-O 用服务器给出的文件名保存。两者都依赖服务端正确响应 Range 请求,遇到不支持断点的服务器只能从头开始,所以大文件优先选支持 Range 的下载源。

curl 请求 JSON 返回 415 或参数解析错误,多半漏了什么?

漏了 Content-Type。curl -d 默认发 application/x-www-form-urlencoded,服务端会按表单解析,于是拿到的是一段无法映射到字段的字符串。带上 -H 「Content-Type: application/json」 才会按 JSON 解析。另外 curl -d 会自动把请求方法设为 POST,需要显式换方法时再用 -X 覆盖;确认重定向和状态码时 curl 默认不跟随跳转,要加 -L。

只想快速确认接口通不通,返回体又很长,怎么只要状态码?

用 curl -s -o /dev/null -w "%{http_code}":-s 静默掉进度条,-o /dev/null 把响应体丢弃,-w 按格式串输出你指定的字段,这样终端上只剩一个状态码。要更多信息就把 -w 的格式串写长,比如带上 content_type、size_download 或 time_total,一次请求把状态、类型、耗时全部拿到。手写格式串嫌麻烦就准备一个 curl-format.txt,用 curl -w "@curl-format.txt" 引用。

排查连接问题时,curl -v 和 wget -S 该看哪个?

定位层面不同。curl -v 输出的是完整的请求与响应交互,包含发出的请求行、请求头、连接与 TLS 协商过程以及响应头,能看到 TLS 协商、重定向链这类细节,适合分析客户端到底发了什么、服务端回了什么。wget -S 只打印响应头,输出干净,适合快速确认状态码与关键头字段。真正要查「为什么慢/为什么失败」时 curl -v 的信息量明显更大,因为它把客户端的等待过程也显示出来了。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年8月2日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们