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 查看完整的命令选项。

THE END