curl / wget 速查表 - 命令行文件下载与 HTTP 请求大全
面向在纯命令行环境调接口、下载文件、排查 HTTP 问题的工程师。curl 与 wget 虽常被并列,定位不同:curl 是 HTTP 客户端,适合调接口、带方法/Header/Cookie;wget 偏文件抓取,断点续传和递归镜像更顺手。读完能为每种任务选对工具,用 wget -c 续传大文件,用 curl -v/-w 定位接口问题,并处理代理与认证。
基础请求 Requests 6
curl https://api.testcurl -O https://x/file.zipcurl -o out.html https://xwget https://x/file.zipwget -O out.html https://xcurl -I https://x请求方法 Method 5
curl -X POST https://xcurl -d 'a=1&b=2' https://xcurl -d @body.json https://xcurl -H 'Content-Type: application/json' -d '{"a":1}' https://xcurl -T file.zip https://x/upload请求头与 Cookie 5
curl -H 'Authorization: Bearer TOKEN' https://xcurl -b cookie.txt https://xcurl -c cookie.txt https://xwget --header="Auth: TOKEN" https://xwget --save-cookies c.txt --keep-session-cookies https://x下载与续传 Download 5
curl -C - -O https://x/big.isowget -c https://x/big.isowget -r -np -l 2 https://x/dir/curl -L https://xwget --mirror -p --convert-links https://x认证与代理 Auth & Proxy 4
curl -u user:pass https://xcurl -x http://proxy:8080 https://xwget -e use_proxy=yes -e http_proxy=http://proxy:8080 https://xcurl -k https://x调试与排错 Debug 5
curl -v https://xcurl -s -o /dev/null -w "%{http_code}" https://xcurl -w "@curl-format.txt" https://xwget -S https://xwget --debug https://xcurl vs wget 对照 4
上传文件递归镜像整站默认输出易用性命令示例
构造一次正确的 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://x301 出现在这里说明 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日,内容持续校对官方文档。