curl 的用法指南

curl 是一款开源命令行工具,同时也是开发库,基于 URL 语法进行网络数据传输。支持 HTTP、HTTPS、FTP、SFTP、TELNET、SMTP 等数十种协议。可用来发送各类网络请求、文件上传下载,同时完整支持 Cookie、身份认证、代理、限速等丰富能力。

curl 使用实例

curl 默认发起 GET 请求,服务器返回的响应内容直接输出到终端标准输出。

curl [options...] <url>

基础访问

curl https://www.example.com

跟踪重定向(301、302、303)

很多接口、网页返回重定向,curl 默认不会自动跳转,使用 -L--location 跟随重定向。

curl -L https://www.example.com

保存页面到本地

  • -o(小写 o):自定义输出文件名
  • -O(大写 O):直接使用远程资源原始文件名
  • 也可以使用 shell 重定向 >> 输出到文件
# shell 重定向
curl https://www.example.com >> example.html
# 指定保存文件名
curl -o example.html https://www.example.com
# 使用远程文件名保存
curl -O https://www.example.com/index.html

查看 HTTP 响应头

  • -i:输出响应头 + 响应体完整内容
  • -I--head:仅发送 HEAD 请求,只获取响应头,不获取响应体
# 头+正文一起输出
curl -i https://www.example.com

# 只看响应头
curl -I https://www.example.com
curl --head https://www.example.com

指定 HTTP 请求方法

使用 -X 指定 HTTP method,如 POSTPUTDELETE 等。带 -d--data 时 curl 会自动改成 POST。

# 获取公网 IP 信息
curl http://ip-api.com/json

# DELETE 请求
curl -X DELETE https://www.example.com/api/delete/xxx

# POST 请求,携带表单数据
curl -X POST --data 'keyword=example' https://www.example.com/api/xxx

HTTPS 客户端证书访问

访问需要客户端 SSL 证书认证的 HTTPS 服务,使用 -E--cert 指定证书文件。

curl -E my_cert.pem https://www.example.com

添加自定义请求头

多次传入 -H 可以设置多条请求头。

curl -H 'Content-Type:application/json' -H 'Authorization: ndhielsi.ighhgeuwj' https://www.example.com
  • -b:读取 Cookie,可以直接写 cookie 字符串,也可以读取本地 cookie 文件。
  • -c:把服务器返回的 Set-Cookie 写入到指定文件保存。
# 直接设置 cookie 字符串
curl --cookie 'token=1234' https://www.example.com

# 从本地文件读取 cookie
curl -b my_cookies.txt https://www.example.com

# 读取旧 cookie,同时将新的 cookie 保存到文件
curl -b my_cookies.txt -c newcookies.txt https://www.example.com

文件上传

-T 在 HTTP 上通常是 PUT 整个文件;表单上传用 -F

curl -T ./index.html https://www.example.com/api/upload

伪造 Referer 请求来源

修改请求头里的 Referer 字段。

curl -e http://localhost https://www.example.com

设置代理

curl -x 123.45.67.89:1080 https://www.example.com

批量循环下载

支持序列、大括号模式批量下载资源:

# screen1.JPG ~ screen10.JPG
curl -O http://mydomain.net/~zzh/screen[1-10].JPG

# 两组变量组合
curl -O http://mydomain.net/~{zzh,nick}/[001-201].JPG

# 自定义输出文件名,#1 代表第一个变量,#2 第二个变量
curl -o #2_#1.jpg http://mydomain.net/~{zzh,nick}/[001-201].JPG

分块下载(断点分片)

-r 指定字节范围,格式是 起点-终点(中间不要空格拆成两个参数)。配合 & 后台并行下载,之后手动合并分片。

curl -r 0-10240 -o "zhao.part1" https://www.example.com/media/zhao1.mp3 &
curl -r 10241-20480 -o "zhao.part2" https://www.example.com/media/zhao1.mp3 &
curl -r 20481-40960 -o "zhao.part3" https://www.example.com/media/zhao1.mp3 &
curl -r 40961- -o "zhao.part4" https://www.example.com/media/zhao1.mp3

限速下载

模拟弱网,限制传输带宽,支持 km 单位。

curl --limit-rate 200k https://www.example.com

常用参数

# ========== 调试输出类 ==========
-v, --verbose                     输出完整请求交互详情(调试首选)
-q, --disable                     禁用 .curlrc 配置文件
-K, --config FILE                 读取指定配置文件
-L, --location                    跟踪 HTTP 重定向

# ========== 输出静默控制 ==========
-s, --silent                      静默模式,不输出进度信息
-S, --show-error                  和 -s 搭配,仅发生错误时显示错误
-f, --fail                        HTTP 请求失败不输出 HTML 错误页面
-i, --include                     在输出中包含响应头
-I, --head                        仅发送 HEAD 请求,只获取响应头
-#, --progress-bar                显示简易进度条

# ========== HTTP 请求相关 ==========
-X, --request [GET|POST|PUT|DELETE]  指定 HTTP 请求方法
-H, --header <header>              设置请求头,可多次使用
-e, --referer                      设置 Referer 请求来源
-d, --data <data>                  POST 请求 body,默认编码 application/x-www-form-urlencoded
    --data-raw <data>              原始 POST 数据
    --data-binary <data>           二进制 POST 数据
    --data-urlencode <data>        自动 url 编码 POST 参数
-G, --get                          使用 GET 方式发送 -d 携带的数据
-F, --form <name=string>           模拟 multipart/form-data 表单提交
-u, --user <user:password>         设置账号密码基础认证
-b, --cookie <data|file>           设置 cookie、读取 cookie 文件
-j, --junk-session-cookies        忽略文件内的 session cookie
-A, --user-agent <str>             设置 User-Agent

# ========== 网络传输设置 ==========
-C, --continue-at OFFSET           断点续传,指定偏移字节
-x, --proxy [PROTOCOL://]HOST[:PORT] 设置代理
-U, --proxy-user USER[:PASSWORD]   代理账号密码

# ========== 文件上传 ==========
-T, --upload-file <file>           上传文件

# ========== 文件输出相关 ==========
-o, --output <file>                将响应写入指定文件
-O, --remote-name                  使用远程文件名保存
-D, --dump-header <file>           将全部响应头保存至文件
-c, --cookie-jar <file>            将服务器返回 cookie 写入文件

© lizhao all right reserved,powered by Gitbook文件修订时间: 2026-09-02 21:28:54

results matching ""

    No results matching ""