1. curl 的基本语法

 

curl 的基本命令格式如下:

 


 

2. 基础操作:获取数据 (GET)

 

默认情况下,curl 执行的是 GET 请求,并将响应的主体(Body)直接打印到标准输出(你的终端)。

 

2.1 基本 GET 请求

 

 

 

2.2 保存输出到文件 (-o / -O)

 

 

2.3 跟踪重定向 (-L)

 

默认情况下,curl 不会跟踪 HTTP 301/302 重定向。使用 -L (Location) 标志来让它跟踪。

 

 

2.4 显示进度条 (-#)

 

当你下载大文件时,curl 默认的进度表信息量很大。使用 -% (或 --progress-bar) 可以显示一个更简洁的进度条。

 


 

3. 网络调试:查看详细信息

 

这部分是 curl 用于调试的精华。

 

3.1 Verbose 模式 (-v)

 

curl -v 会打印出所有详细的通信过程,包括你的请求头、SSL 握手信息和服务器的响应头。这对于调试 "为什么连接失败" 至关重要。

 

你会看到类似这样的输出:

 

3.2 仅显示响应头 (-I)

 

使用 -I (大写 i) 会让 curl 发送一个 HEAD 请求。服务器只会返回响应头 (Headers),不返回主体内容。这非常适合快速检查服务器状态、Content-Type 或重定向。

 

 

3.3 显示响应头和主体 (-i)

 

使用 -i (小写 i) 会在输出中同时包含响应头和主体内容。

 

 

3.4 静默模式 (-s)

 

curl -s (silent) 会隐藏进度表和错误信息。这在脚本中非常有用,你只关心最终的输出数据。

 

专业提示: curl -sS 是一个常用组合,它在保持静默(-s)的同时,如果真的发生错误,仍然会显示错误信息(-S)。


 

4. API 调试:HTTP 方法与数据 (POST, PUT, DELETE)

 

这是 curl 作为 API 测试工具的核心功能。

 

4.1 指定请求方法 (-X)

 

使用 -X 标志来指定 GET 以外的 HTTP 方法。

 

 

4.2 发送 POST 数据 (-d 或 --data)

 

这是 POST 请求最常用的部分。

a) 发送 URL 编码的表单数据

当你使用 -d 时,curl 默认会使用 application/x-www-form-urlencodedContent-Type 来发送数据。

 

b) 发送 JSON 数据 (重要!)

现代 API 大多使用 JSON。当发送 JSON 时,你必须同时做两件事

  1. -d 传递 JSON 字符串。
  2. -H (Header) 显式设置 Content-Typeapplication/json

 

c) 从文件读取 POST 数据

如果你的 JSON 数据非常大,可以先存在一个文件里(例如 data.json),然后使用 @ 符号来让 curl 读取文件内容。

 

 

4.3 发送文件 (Multipart/form-data) (-F)

 

当你需要上传文件(例如图片、zip),必须使用 -F (Form) 来发送 multipart/form-data 请求。

 


 

5. 自定义请求:Headers 与认证

 

 

5.1 设置自定义请求头 (-H)

 

-H (Header) 标志可能是 curl 最强大的标志之一。

 

 

5.2 基本认证 (-u)

 

如果 API 使用的是 HTTP 基本认证 (Basic Auth),curl 提供了简单的 -u 标志。

 

curl 可能会提示你输入密码,以避免密码在命令行历史中暴露。


 

 

curl 可以模拟登录,因为它能处理 Cookies。

示例:模拟登录

 


 

7. 安全与网络选项

 

 

7.1 忽略 SSL 证书验证 (-k)

 

curl -k (或 --insecure) 会跳过 SSL/TLS 证书的验证。

⚠️ 警告: 这非常不安全,会使你受到中间人攻击。仅在你完全信任网络,并且在测试使用自签名证书的开发服务器时使用。

 

 

7.2 设置超时

 

 

 

7.3 使用代理 (-x)

 

 


 

curl 快速备忘录

 

标志全称功能
-o [file]--output将输出保存到指定文件。
-O--remote-name使用 URL 中的文件名保存。
-L--location跟踪 HTTP 重定向。
-v--verbose显示详细的通信过程 (调试用)。
-i--include在输出中包含响应头。
-I--head(发 HEAD 请求) 仅获取响应头。
-s--silent静默模式,不显示进度或错误。
-S--show-error配合 -s,在出错时显示错误。
-#--progress-bar显示简洁的进度条。
-X [METHOD]--request指定 HTTP 方法 (如 POST, PUT, DELETE)。
-H [header]--header发送自定义请求头 (如 Content-Type: ...)。
-d [data]--data发送 POST 数据 (URL 编码)。
-F [data]--form发送 multipart/form-data (用于文件上传)。
-u [user:pass]--userHTTP 基本认证。
-b [file]--cookie从文件读取并发送 Cookies。
-c [file]--cookie-jar将收到的 Cookies 保存到文件。
-k--insecure忽略 SSL 证书验证 (不安全)。
-x [proxy]--proxy使用 HTTP/SOCKS 代理。