一、认识 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 常用选项汇总

为了方便查阅,这里整理了本文提到的核心选项及含义:

选项

全称

含义

常用场景

-X [方法]

--request

指定请求方法(GET/POST/PUT/DELETE 等)

发送非 GET 请求

-d [数据]

--data

传递请求数据(自动设为 POST)

提交表单或 JSON 数据

-H [头信息]

--header

自定义请求头

设置 Content-Type、Token 等

-O

--remote-name

按原文件名保存下载文件

下载文件

-o [路径]

--output

自定义下载文件路径和名称

下载文件

-C -

--continue-at

断点续传

恢复中断的下载

-v

--verbose

显示请求详情(调试用)

接口调试

-b [Cookie]

--cookie

携带 Cookie 请求

登录后访问页面

-c [文件]

--cookie-jar

保存 Cookie 到文件

保存登录状态

-x [代理]

--proxy

使用代理服务器

代理访问网络

-k

--insecure

忽略 SSL 证书验证(测试用)

访问自签名证书的 HTTPS 服务

-F [数据]

--form

模拟表单上传文件

文件上传

-s

--silent

静默模式(不输出进度条)

脚本自动化、查看状态码

-w [格式]

--write-out

自定义输出格式(如状态码)

检查接口状态

总结

cURL 作为一款轻量级、功能全面的命令行工具,不仅能满足日常的请求发送和文件下载需求,还能通过灵活的选项应对复杂的开发和运维场景。本文从基础安装到进阶用法,覆盖了 cURL的核心能力,希望能帮助你快速上手并灵活运用。

如果需要进一步深入,可通过curl --help查看所有选项,或访问 curl 官方文档 获取更详细的教程和示例。