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,如 POST、PUT、DELETE 等。带 -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
Cookie
-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
限速下载
模拟弱网,限制传输带宽,支持 k、m 单位。
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 写入文件