[Tool] [HTTP] curl: 网络请求与文件传输

01 背景与简介

curl (Client URL) 是一个功能强大的命令行工具,用于通过各种协议(如 HTTP, HTTPS, FTP, FTPS, SCP, SFTP 等)传输数据。它常用于测试 API、下载文件、提交表单等任务。

1.1 核心语法

curl 的基本用法非常灵活,其核心结构如下:

curl [选项] [URL]

1.2 常用示例速览

场景 命令示例 描述
下载网页内容 curl https://example.com 将网页 HTML 内容输出到终端。
下载文件 curl -O https://example.com/file.zip 下载文件并保留原文件名。
POST 数据 curl -X POST -d 'key=value' https://api.example.com 使用 POST 方法提交数据。
查看请求头 curl -I https://example.com 只显示响应头信息。

02 HTTP 请求方法与数据传输

2.1 指定 HTTP 方法 (-X)

使用 -X--request 选项可以指定 HTTP 请求方法,例如 GETPOSTPUTDELETE 等。

# 发送 DELETE 请求
curl -X DELETE https://api.example.com/users/1

2.2 传输数据 (-d)

-d--data 选项用于发送数据,通常与 POSTPUT 方法一起使用。

默认行为: 使用 -d 时,curl 会自动将请求方法设置为 POST,并将 Content-Type 标头设置为 application/x-www-form-urlencoded

# 提交表单数据(自动使用 POST)
curl -d 'username=alice&password=123' https://api.example.com/login

# 提交 JSON 数据(需要手动指定 Content-Type)
curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{"id": 1, "status": "active"}' \
     https://api.example.com/items

2.3 文件上传 (-F)

使用 -F--form 选项可以模拟浏览器提交表单,用于上传文件。

# 上传本地的 image.jpg 文件
curl -F 'file=@/path/to/image.jpg' https://api.example.com/upload

03 身份认证与安全

3.1 HTTP 身份认证 (-u)

-u--user 选项用于指定用户名和密码,进行 Basic 或 Digest 认证。

# Basic 认证:将 'user:password' 进行 Base64 编码后发送
curl -u 'user:password' https://secure.api.example.com/data

3.2 自动选择认证方式 (--anyauth)

当需要与支持多种认证机制的服务器通信时,--anyauth 可以让 curl 自动选择最安全的认证方式(如 Digest 或 NTLM)。

核心认证示例(结合您原始的命令):

# 假设 API 接受 POST 方法,发送 ID=1 的数据,并尝试使用 'Admin:passwd' 进行认证
# 注意:您的原始命令格式有误,-d 应紧跟数据,-u 或 --anyauth 应独立。

# 正确的命令结构示例:
curl -X POST \
     -d 'ID:1' \
     -u 'Admin:passwd' \
     --anyauth \
     http://127.0.0.1:8080

注:-d 'Key: Value' 这种格式通常用于发送普通文本或表单数据,而不是请求头。请求头应使用 -H

04 调试与进阶选项

选项 别名 功能描述
--location -L 重定向: 跟随 HTTP 3xx 响应中的 Location 标头跳转。
--include -i 包含头: 在输出中包含 HTTP 响应头。
--head -I 仅头信息: 只请求 HTTP 头(使用 HEAD 方法)。
--verbose -v 详细模式: 显示连接、传输过程和 HTTP 头信息,常用于调试。
--output -o 保存文件: 将输出保存到指定文件,而不是打印到终端。
--referer -e 设置 HTTP Referer 标头。
--header -H 自定义请求头: 添加或修改自定义 HTTP 请求头。
# 示例:跟随重定向,并将网页内容保存到 index.html
curl -L -o index.html https://some.short.url
posted on 2025-10-21 00:41  风惊庭前叶  阅读(27)  评论(0)    收藏  举报