一、认识 cURL
curl(CommandLine URL)是一款开源的命令行工具,支持 HTTP、HTTPS、FTP、SFTP、TELNET 等多种协议,可用于发送请求、获取数据、上传文件等操作。它的核心优势在于:
跨平台:支持 Linux、macOS、Windows 等所有主流操作系统;
无界面依赖:纯命令行操作,适合服务器环境和脚本自动化;
功能全面:可自定义请求头、Cookie、代理,支持断点续传、文件上传等;
轻量级:无需安装复杂环境,多数系统(如 Linux、macOS)默认自带。
二、cURL安装
虽然多数 Linux 发行版和 macOS 默认预装 curl,但如果你的系统没有(如部分 Windows 或精简版 Linux),可按以下步骤安装:
1. Linux 系统
CentOS/RHEL:通过 yum 包管理器安装
sudo yum install curl -y
Ubuntu/Debian:通过 apt 包管理器安装
sudo apt install curl -y
2. macOS 系统
macOS 默认自带 curl,若需更新到最新版本,可通过 Homebrew 安装:
brew install curl
3. Windows 系统
方法 1:下载官方安装包
访问 curl官网下载页,选择 Windows 版本(如curl-8.5.0_7-win64-mingw.zip),解压后将bin目录添加到系统环境变量,打开命令提示符即可使用。
方法 2:通过 WSL 或 Chocolatey
若安装了 Windows Subsystem for Linux(WSL),可直接在 WSL 中使用 Linux 的 curl;或通过 Chocolatey 包管理器安装:
choco install curl
安装完成后,在终端输入curl --version,若显示版本信息(如curl 8.5.0 (x86_64-pc-linux-gnu)),则说明安装成功。
三、curl 基础用法
curl 的基本语法为:curl [选项] [URL],其中 “选项” 用于自定义请求行为,“URL” 为目标资源地址。以下是最常用的基础场景:
1. 发送 GET 请求(默认请求)
GET 请求是 curl 的默认请求方式,无需额外选项,直接指定 URL 即可获取资源。例如:
获取百度首页的 HTML 内容:
curl https://www.baidu.com
带参数的 GET 请求(参数拼接在 URL 后,用?分隔,多个参数用&分隔):
curl https://www.example.com/search?keyword=curl&page=1
2. 发送 POST 请求(-X POST 或 -d)
POST 请求常用于提交表单数据或 JSON 数据,需用-X POST指定请求方法,或直接用-d(--data)传递数据(-d会自动将请求方法设为 POST)。
场景 1:提交表单数据(application/x-www-form-urlencoded)
curl -d "username=test&password=123456" https://www.example.com/login
场景 2:提交 JSON 数据(application/json)
需用-H(--header)指定请求头Content-Type: application/json,同时用-d传递 JSON 字符串(注意 JSON 字符串需用单引号包裹,避免 Shell 解析双引号):
curl -H "Content-Type: application/json" \
-d '{"username":"test","password":"123456"}' \
https://www.example.com/login
3. 下载文件(-O 或 -o)
curl 可用于下载文件,常用选项有-O(大写 O,按原文件名保存)和-o(小写 o,自定义保存文件名)。
按原文件名保存:-O需与完整的文件 URL 配合(URL 需包含文件名),例如下载 curl 的官方安装包:
curl -O https://curl.se/download/curl-8.5.0.tar.gz
自定义文件名保存:用-o指定保存路径和文件名,例如将文件保存为curl-latest.tar.gz:
curl -o ~/downloads/curl-latest.tar.gz https://curl.se/download/curl-8.5.0.tar.gz
4. 断点续传(-C -)
若下载大文件时中断,可通过-C -(-C为--continue-at的缩写,-表示从上次中断的位置继续)恢复下载,避免重新下载整个文件:
curl -C - -O https://curl.se/download/curl-8.5.0.tar.gz
5. 显示请求详情(-v 或 --verbose)
调试接口时,常需要查看请求头、响应头、TCP 连接过程等细节,可使用-v(或--verbose)开启详细日志模式:
curl -v https://www.baidu.com
执行后会输出三部分内容:
* 开头:curl 的调试信息(如 TCP 连接、SSL 握手);
> 开头:发送给服务器的请求头(如GET / HTTP/1.1、Host: www.baidu.com);
< 开头:服务器返回的响应头(如HTTP/1.1 200 OK、Content-Length: 2443)。
四、curl 进阶用法:应对复杂场景
在实际开发中,我们常遇到需要自定义 Cookie、使用代理、验证 SSL 证书等场景,以下是 curl 的进阶用法:
1. 自定义请求头(-H)
除了前面提到的Content-Type,还可通过-H添加任意请求头,例如User-Agent(模拟浏览器)、Authorization(身份验证)等。
模拟 Chrome 浏览器请求:
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" \
https://www.example.com
带 Token 的身份验证(常见于 API 接口):
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
https://api.example.com/user/info
2. 携带 Cookie(-b 或 -c)
curl 支持携带 Cookie 发送请求(-b)和保存响应中的 Cookie 到文件(-c)。
携带 Cookie 请求:用-b "cookie1=value1; cookie2=value2"直接传递 Cookie,或从文件读取 Cookie(如-b cookies.txt):
# 直接传递Cookie
curl -b "sessionid=abc123; username=test" https://www.example.com/user
# 从文件读取Cookie(文件格式:每行一个Cookie,如“sessionid=abc123”)
curl -b cookies.txt https://www.example.com/user
保存 Cookie 到文件:用-c指定 Cookie 文件路径,响应中的 Cookie 会自动写入该文件:
# 访问登录接口后,将响应的Cookie保存到cookies.txt
curl -c cookies.txt -d "username=test&password=123456" https://www.example.com/login
3. 使用代理服务器(-x 或 --proxy)
若需通过代理访问网络(如测试海外接口、绕过地域限制),可使用-x指定代理地址,支持 HTTP、HTTPS、SOCKS5 等代理类型。
HTTP 代理:
curl -x http://127.0.0.1:8080 https://www.example.com
SOCKS5 代理(需指定socks5://前缀):
curl -x socks5://127.0.0.1:1080 https://www.example.com
带身份验证的代理(在代理地址中添加用户名和密码:user:pass@proxy:port):
curl -x http://test:123456@127.0.0.1:8080 https://www.example.com
4. 忽略 SSL 证书验证(-k 或 --insecure)
访问 HTTPS 网站时,curl 会默认验证服务器的 SSL 证书是否有效。若测试本地服务或自签名证书的网站,会出现 “SSL certificate problem” 错误,此时可通过-k忽略证书验证(仅用于测试,生产环境不推荐):
# 访问本地自签名证书的HTTPS服务
curl -k https://localhost:8080
5. 上传文件(-F 或 --form)
curl 支持通过-F(模拟表单的multipart/form-data类型)上传文件,常用于图片、文档等二进制文件的上传。语法为:-F "表单字段名=@文件路径;filename=自定义文件名"(@表示后面是文件路径)。
例如,上传本地图片test.jpg到文件上传接口,表单字段名为image:
curl -F "image=@./test.jpg;filename=my-image.jpg" https://www.example.com/upload
若无需自定义文件名,可简化为:
curl -F "image=@./test.jpg" https://www.example.com/upload
五、curl 常用选项汇总
为了方便查阅,这里整理了本文提到的核心选项及含义:
总结
cURL 作为一款轻量级、功能全面的命令行工具,不仅能满足日常的请求发送和文件下载需求,还能通过灵活的选项应对复杂的开发和运维场景。本文从基础安装到进阶用法,覆盖了 cURL的核心能力,希望能帮助你快速上手并灵活运用。
如果需要进一步深入,可通过curl --help查看所有选项,或访问 curl 官方文档 获取更详细的教程和示例。
评论