简介
curl
是一个用于从命令行或脚本中与 URL 进行交互的工具。它支持多种协议,包括 HTTP、HTTPS、FTP、SFTP 等,广泛用于数据传输和网络请求。
安装
在大多数 Linux 发行版中,curl
通常预装。你可以通过以下命令检查是否已安装:
|
|
如果未安装,可以使用包管理器进行安装:
-
Debian/Ubuntu:
1
sudo apt-get install curl
-
CentOS/RHEL:
1
sudo yum install curl
-
macOS:
1
brew install curl
基本用法
最简单的用法是直接跟上 URL,curl
会默认使用 GET 方法请求该 URL,并将其响应内容(通常是 HTML 或 JSON)打印到标准输出(你的终端屏幕上)。
|
|
常见参数(按功能分类)
输出控制 (Output Control)
默认情况下,curl
将所有内容输出到屏幕。以下参数可以控制输出行为。
-o, --output <file>
- 功能:将输出保存到指定的文件,而不是屏幕。
- 示例:
curl -o page.html https://www.example.com
-O, --remote-name
- 功能:将输出保存到文件,并以 URL 中指定的文件名来命名。
- 示例:
curl -O https://curl.se/download/curl-7.85.0.tar.gz
(会保存为curl-7.85.0.tar.gz
文件)
-s, --silent
- 功能:静默模式。不显示进度表或错误信息。非常适合在脚本中使用。
- 示例:
cron_job_result=$(curl -s https://api.example.com/status)
-i, --include
- 功能:在输出中包含 HTTP 响应头(Response Headers)。这对于调试非常有用。
- 示例:
curl -i https://www.example.com
-v, --verbose
- 功能:显示详细的通信过程,包括请求头、响应头和连接信息。是终极调试利器。
- 示例:
curl -v https://api.example.com/data
HTTP 请求方法 (HTTP Method)
-X, --request <METHOD>
- 功能:指定要使用的 HTTP 请求方法,如
GET
,POST
,PUT
,DELETE
等。默认是GET
。 - 示例:
curl -X POST https://api.example.com/users
curl -X DELETE https://api.example.com/users/123
- 功能:指定要使用的 HTTP 请求方法,如
发送数据 (Sending Data)
常用于 POST
或 PUT
请求。
-d, --data <data>
- 功能:发送 HTTP POST 请求的数据。
Content-Type
默认为application/x-www-form-urlencoded
。 - 示例 (发送表单数据):
curl -X POST -d "name=John&age=30" https://api.example.com/register
- 示例 (发送 JSON 数据):需要配合
-H
指定Content-Type
。curl -X POST -d '{"name":"John", "age":30}' -H "Content-Type: application/json" https://api.example.com/users
- 从文件读取数据:
curl -d @data.json -H "Content-Type: application/json" https://api.example.com/users
(注意@
符号)
- 功能:发送 HTTP POST 请求的数据。
-F, --form <name=content>
- 功能:发送
multipart/form-data
类型的数据,常用于文件上传。 - 示例 (上传文件):
curl -X POST -F "file=@/path/to/your/image.jpg" -F "username=dave" https://api.example.com/upload
- 功能:发送
自定义请求头 (Custom Headers)
-H, --header <header>
- 功能:添加自定义的 HTTP 请求头。可以多次使用以添加多个头。
- 示例:
- 设置内容类型:
curl -H "Content-Type: application/json" ...
- 设置认证 Token:
curl -H "Authorization: Bearer your_jwt_token" https://api.example.com/secure-data
- 模拟浏览器:
curl -H "User-Agent: Mozilla/5.0" https://www.example.com
- 设置内容类型:
安全与认证 (Security & Authentication)
-u, --user <user:password>
- 功能:设置 HTTP Basic Authentication 的用户名和密码。
- 示例:
curl -u admin:123456 https://api.example.com/admin
-k, --insecure
- 功能:允许
curl
连接到没有有效 SSL/TLS 证书的 HTTPS 站点(例如,使用自签名证书的开发环境)。警告:请勿在生产环境中使用此选项! - 示例:
curl -k https://localhost:8443
- 功能:允许
-L, --location
- 功能:自动跟踪 HTTP 重定向(响应状态码为 3xx)。很多网站会使用重定向,所以这是一个非常实用的参数。
- 示例:
curl -L http://google.com
(http 会重定向到 https)
连接控制 (Connection Control)
--connect-timeout <seconds>
- 功能:设置建立连接的最大等待时间(秒)。
- 示例:
curl --connect-timeout 5 https://api.example.com
-m, --max-time <seconds>
- 功能:设置整个操作(连接、数据传输等)允许花费的最长时间。
- 示例:
curl -m 10 https://api.example.com
-x, --proxy <[protocol://]host[:port]>
- 功能:通过指定的代理服务器发送请求。
- 示例:
curl -x http://proxyserver:8080 https://www.example.com
常用参数速查表
短参数 | 长参数 | 功能说明 |
---|---|---|
-X |
--request |
指定 HTTP 请求方法 (GET, POST, PUT, DELETE) |
-H |
--header |
添加自定义请求头 (例如 Content-Type , Authorization ) |
-d |
--data |
发送 application/x-www-form-urlencoded 格式的数据 |
-F |
--form |
发送 multipart/form-data 数据,常用于文件上传 |
-i |
--include |
在输出中包含响应头 |
-v |
--verbose |
显示详细的通信过程,用于调试 |
-o |
--output |
将输出保存到指定文件 |
-O |
--remote-name |
以远程文件名保存输出 |
-s |
--silent |
静默模式,不显示进度和错误 |
-L |
--location |
自动跟随 HTTP 重定向 |
-u |
--user |
设置 HTTP 基本认证的用户名和密码 |
-k |
--insecure |
忽略 SSL 证书验证 (慎用!) |