Curl 用法详解:如何在终端中发送请求
Curl 用法详解:如何在终端中发送请求
Curl(Client URL)是一个命令行工具,用于与服务器进行数据传输。它支持多种协议,如 HTTP、HTTPS、FTP、FTPS、SFTP 等,可以用于发送各种类型的请求并获取响应。Curl 功能强大,广泛用于调试、自动化脚本、API 测试等场景。本文将详细介绍如何在终端中使用 Curl 发送请求,帮助你掌握其常见用法。
一、基础用法
1. 发送 GET 请求
最常见的请求方式是 GET 请求,它用于从服务器获取数据。
bash
curl https://www.example.com
这个命令会向 https://www.example.com
发送 GET 请求,并在终端显示响应的内容。如果是网页内容,通常是 HTML 数据。
2. 显示响应头
如果你只想查看 HTTP 响应头信息(而不显示响应体内容),可以使用 -I
或 --head
参数。
bash
curl -I https://www.example.com
这个命令会发送一个 GET 请求,并只显示服务器返回的响应头,包含状态码、服务器信息、日期等元数据。
二、发送 POST 请求
POST 请求用于将数据发送到服务器,通常用于表单提交、上传文件等操作。
1. 发送简单的 POST 请求
如果你需要发送一些简单的数据,如表单数据,可以使用 -d
参数。
bash
curl -X POST -d "username=admin&password=12345" https://www.example.com/login
-X POST
指定请求方法为 POST。-d
参数后跟要发送的数据,可以是键值对,模拟 HTML 表单提交。
2. 发送 JSON 数据
在现代 Web 开发中,许多 API 接口需要发送 JSON 格式的数据。要发送 JSON 数据,你需要设置 Content-Type
头为 application/json
,并将 JSON 数据传递给 -d
参数。
bash
curl -X POST -H "Content-Type: application/json" -d '{"username": "admin", "password": "12345"}' https://www.example.com/api/login
-H "Content-Type: application/json"
设置请求头。-d '{"username": "admin", "password": "12345"}'
传递 JSON 数据。
三、常见选项与功能
1. 设置请求头
有时我们需要自定义请求头,比如设置认证信息、内容类型等。使用 -H
参数可以添加一个或多个自定义请求头。
bash
curl -H "Authorization: Bearer your-token" https://www.example.com/protected-resource
-H "Authorization: Bearer your-token"
设置 Bearer 认证头,常用于 OAuth2 等认证方式。
2. 跟踪请求过程
要查看请求的详细过程,包括请求头、响应头、传输速度等,可以使用 -v
或 --verbose
参数。
bash
curl -v https://www.example.com
这会输出详细的调试信息,帮助你了解请求的每个细节。
3. 保存响应到文件
如果你想将响应内容保存到文件,而不是显示在终端,可以使用 -o
参数。
bash
curl -o output.html https://www.example.com
这个命令将把响应内容保存到当前目录下的 output.html
文件中。
4. 显示进度条
对于下载大文件,Curl 会默认显示进度条。如果你想手动控制或禁用进度条,可以使用 -#
或 -s
参数。
bash
curl -O https://www.example.com/largefile.zip
-O
参数表示根据 URL 中的文件名保存文件。-#
显示进度条。-s
禁用进度条。
5. 跳过 SSL 验证
在某些情况下,可能需要绕过 SSL 证书验证,特别是在访问一些未加密或自签名证书的服务器时。可以使用 -k
或 --insecure
参数来禁用 SSL 验证。
bash
curl -k https://self-signed.example.com
警告:绕过 SSL 验证可能会增加安全风险,只有在完全信任的情况下使用。
四、文件上传与下载
1. 上传文件
如果你需要上传文件到服务器,Curl 提供了 -F
参数来模拟表单文件上传。
bash
curl -X POST -F "file=@path/to/file" https://www.example.com/upload
-F "file=@path/to/file"
表示上传本地文件path/to/file
,并命名为file
字段。
2. 下载文件
要下载文件,可以使用 -O
或 -o
参数。
bash
curl -O https://www.example.com/file.zip
这个命令会将文件 file.zip
下载到当前目录。若想将文件保存为其他名字,可以使用 -o
参数:
bash
curl -o myfile.zip https://www.example.com/file.zip
3. 断点续传
如果下载过程中断了,可以使用 -C -
参数来从上次中断的地方继续下载。
bash
curl -C - -O https://www.example.com/largefile.zip
这个命令会检查文件的部分内容,并从中断位置继续下载。
五、处理 Cookies
1. 发送 Cookies
有些请求需要带上 cookies。可以使用 -b
参数指定 cookie 文件或直接设置 cookies。
bash
curl -b "name=value" https://www.example.com
-b "name=value"
发送指定的 cookie。- 你也可以使用
-b cookies.txt
指定一个包含多个 cookies 的文件。
2. 保存 Cookies
要将服务器返回的 cookies 保存到文件中,可以使用 -c
参数。
bash
curl -c cookies.txt https://www.example.com
这样,服务器返回的 cookies 会保存在 cookies.txt
文件中,后续请求可以使用 -b cookies.txt
发送这些 cookies。
六、其他高级用法
1. 并发请求
通过将多个 Curl 请求写入一个文件并执行,或者使用 xargs
来实现并发请求。
bash
cat urls.txt | xargs -n 1 -P 4 curl -O
这个命令会从 urls.txt
文件中读取 URLs,并并发执行最多 4 个 Curl 请求。
2. 限制带宽
有时你可能希望限制请求的带宽,可以使用 --limit-rate
参数来设置最大下载速率。
bash
curl --limit-rate 100k -O https://www.example.com/largefile.zip
这个命令将限制下载速率为每秒 100 KB。
七、总结
Curl 是一个强大且灵活的工具,适用于从简单的 HTTP 请求到复杂的 API 测试和调试。掌握 Curl 的基本用法和常见参数,可以极大地提升你与服务器交互的效率。通过本文的介绍,你应该能在终端中使用 Curl 发送请求、调试网络问题、进行文件上传和下载等操作。
通过实践和了解更多的 Curl 选项,你将能够应对各种网络请求的场景,成为一个更高效的开发者或运维人员。如果你有更复杂的需求,可以查阅 Curl 的官方文档或使用 curl --help
查看完整的命令选项。