Skip to content

curl

curl 是一个命令行工具和库,用于与各种协议的服务器进行数据传输。它支持 HTTP、HTTPS、FTP、FTPS、SMTP、IMAP 等多种协议,并且可以在几乎所有操作系统上运行。curl 广泛应用于测试 API、下载文件、自动化脚本编写等领域。

curl 的主要特点

  • 多协议支持:除了最常见的 HTTP 和 HTTPS,还支持 FTP、SMTP、IMAP、POP3、SMB 等。
  • 灵活的数据传输:可以发送和接收数据,包括 POST 请求、上传文件、下载文件等。
  • 丰富的选项:提供了大量的命令行选项来定制请求行为,如设置头信息、认证方式、代理服务器等。
  • 跨平台兼容性:几乎可以在所有主流操作系统(Linux、macOS、Windows)上使用。
  • SSL/TLS 支持:能够处理加密连接,确保通信安全。
  • 无界面操作:完全基于命令行,适合脚本和自动化任务。

基本用法

下载文件

bash
curl -O http://example.com/file.zip

此命令会从指定 URL 下载文件并保存为 file.zip

发送 GET 请求

bash
curl https://api.example.com/data

直接访问指定的 URL 并打印响应内容到标准输出。

发送 POST 请求

bash
curl -X POST -d "param1=value1&param2=value2" https://api.example.com/submit

向指定 URL 发送 POST 请求,并附带表单数据。

设置自定义 Header

bash
curl -H "Content-Type: application/json" -X POST -d '{"key":"value"}' https://api.example.com/json

添加自定义头部信息,并发送 JSON 格式的数据。

下载页面并保存为本地文件

bash
curl -o output.html https://www.example.com/

将网页内容保存到名为 output.html 的文件中。

使用 Basic Auth 进行身份验证

bash
curl -u username:password https://api.example.com/protected

通过提供用户名和密码来进行基本身份验证。

高级用法

处理重定向

默认情况下,curl 不会跟随 HTTP 重定向。如果需要自动处理重定向,可以使用 -L 选项:

bash
curl -L http://example.com

指定输出格式(静默模式)

有时你可能只关心响应的状态码或某些特定的信息,而不需要完整的响应体。这时可以使用 -s(静默模式)和 -w(自定义输出格式)选项:

bash
curl -s -o /dev/null -w "%{http_code}\n" https://api.example.com/status

上述命令将只输出 HTTP 状态码。

上传文件

bash
curl -F "file=@/path/to/local/file.txt" https://example.com/upload

使用 -F 选项可以轻松地上传文件到服务器。

使用代理

如果你需要通过代理服务器访问网络资源,可以使用 -x 选项指定代理地址:

bash
curl -x http://proxy.example.com:8080 https://api.example.com/

SSL 证书验证

对于 HTTPS 请求,默认情况下 curl 会验证 SSL 证书的有效性。如果遇到自签名证书或其他问题,可以使用 --insecure 忽略验证(不推荐用于生产环境):

bash
curl --insecure https://self-signed.example.com/

实际应用示例

假设你正在开发一个应用程序,需要定期从某个 API 获取最新的汇率信息。你可以编写一个简单的 Bash 脚本来完成这项工作:

bash
#!/bin/bash

# 定义API端点和API密钥
API_URL="https://api.exchangerate-api.com/v4/latest/USD"
API_KEY="your_api_key_here"

# 发送GET请求并解析JSON响应
response=$(curl -s -H "Authorization: Bearer $API_KEY" "$API_URL")
rates=$(echo $response | jq '.rates')

# 输出结果
echo "Latest exchange rates: $rates"

在这个例子中,我们使用了 curl 来发起 API 请求,并结合 jq 工具来解析返回的 JSON 数据。这只是一个简单的示例,实际应用中可以根据需求进一步扩展和优化。

总结

curl 是一个强大且灵活的命令行工具,适用于各种网络编程和系统管理任务。它的简单易用性和广泛的协议支持使其成为开发者工具箱中的必备工具之一。如果你还有更多关于 curl 的具体问题或需要进一步的帮助,请随时告诉我!

Released under the MIT License.