Httpie — 一款控制台 HTTP 客户端,采用易于人阅读的语法和彩色输出,用于从命令行测试 API。该工具使用直观的语法:http GET https://api.example.com/users,无需为请求头和请求体指定标志。根据 Httpie CLI Documentation (2026),该工具默认支持 JSON、会话、身份验证和插件。
要点
Httpie(或 HTTPie)— 一个用 Python 编写的控制台工具,与 cURL 相比简化了 HTTP 请求的发送。主要区别在于接近自然语言的语法:参数用空格分隔,请求头用冒号表示,JSON 数据用等号表示,无需转义引号。
同样的 POST 请求在 cURL 中至少需要三个标志(-X、-H、-d)并手动转义 JSON。Httpie 用三个词无需标志即可完成同样的事情,自动设置 Content-Type: application/json 并为输出着色。响应默认以缩进和语法高亮格式化。
| 操作 | cURL | Httpie |
|---|---|---|
| GET 请求 | curl https://api.example.com | http GET https://api.example.com |
| POST JSON | curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' https://api.example.com | http POST https://api.example.com name=test |
| 请求头 | curl -H "Authorization: Bearer token123" https://api.example.com | http GET https://api.example.com Authorization:"Bearer token123" |
Httpie 对基本参数使用统一的命令行格式,无需标志。HTTP 方法作为第一个参数(GET、POST、PUT、DELETE、PATCH),URL 作为第二个。如果省略方法,Httpie 自动选择 GET(用于无请求体的请求)或 POST(有请求体)。
Authorization:"Bearer token"。name=John age=30。active:=true tags:=["dev","test"]。avatar@~/photo.jpg。Httpie 自动确定数据类型:如果传递了 key=value — 请求体作为 JSON 发送。如果通过 --raw 传递原始文本 — 作为纯文本。form-data 格式通过 -f 标志启用。
# 带 JSON 数据和请求头的 POST 请求
http POST https://api.example.com/users \
name="John Doe" \
email="john@example.com" \
role:="admin" \
Authorization:"Bearer test123"
# 带高亮和 Pretty-print 的响应
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 42,
"name": "John Doe"
}
JSON 序列化在 Httpie 中自动工作:以 key=value 形式传递的值成为 JSON 的字符串字段。对于数字和布尔值使用 key:=value。嵌套对象通过点符号创建:address.city=Moscow。
Httpie 支持 multipart/form-data 格式,通过 key@path 语法上传文件和数据。如果需将文件内容作为请求的原始请求体发送,则使用输入重定向:http POST example.com < file.json。要将响应下载到文件,使用 -d(download)标志。
# 从文件发送 JSON
http POST https://api.example.com/users < user.json
# 通过 multipart 上传文件
http -f POST https://api.example.com/upload \
photo@~/photo.jpg \
description="Profile photo"
会话在 Httpie 中保存请求之间的状态:cookie、请求头和认证参数。会话通过 --session=name 标志创建。会话数据存储在 ~/.httpie/sessions/ 文件夹中的 JSON 文件中。带有 :readonly 后缀的会话在请求后不会更新。
首先使用凭据向 /auth/login 发送 POST 请求 — 服务器返回会话 cookie。同一会话中对受保护端点的所有后续请求都会自动发送已保存的 cookie,这模拟了测试移动应用 API 时浏览器的行为。
# 步骤 1:身份验证
http --session=app-test POST https://api.example.com/auth/login \
username="dev" password="secret"
# 步骤 2:使用已保存会话 cookie 的请求
http --session=app-test GET https://api.example.com/users/me
Httpie 通过标志支持所有主要认证类型:Basic Auth 使用 -a user:pass,Digest 使用 --auth-type=digest,Bearer Token 使用 --auth-type=bearer TOKEN。自定义请求头以 HeaderName:value 形式添加到命令的任何位置。
要测试使用 OAuth 2.0 的 API,令牌通过 Authorization 请求头传递。Httpie 不在内核层面管理令牌的生命周期 — 这由外部脚本完成。命令 http --auth-type=bearer --auth="$TOKEN" GET https://api.example.com/resource 相当于显式指定带令牌的请求头。
Httpie 凭借零依赖(除 Python 外)和可读的输出,非常适合 CI/CD 流水线。命令无需额外解析即可在日志中轻松读取。该工具通过 pip 安装,并可用于所有流行的 Docker 镜像,包括 Alpine、Ubuntu 以及 Jenkins 和 GitLab CI 系统的官方镜像。这使得 Httpie 成为自动化测试 REST API 和微服务的便捷选择。
典型场景 — 在应用部署后检查 API 状态。Httpie 向健康端点发送请求,如果响应不符合预期,则以非零代码退出。--check-status 标志在状态码 >= 300 时自动返回错误。
# 部署脚本中的健康检查
http --check-status GET https://api.staging.example.com/health
status:="ok" && \
echo "API 健康" || \
echo "API 检查失败"
Httpie 通过 Package Index 系统支持插件。插件添加新的认证类型、序列化格式和传输方式。通过 pip 安装:pip install httpie-plugin-name。安装后,插件在 Httpie 下次启动时自动激活。
Httpie 通过 --pretty=format 选项支持类似 jq 的过滤,并通过 --print 支持与 cURL 兼容的输出。--quiet 标志关闭彩色输出,以便在 CI 日志中获得更好的可读性。要以编程方式处理响应,请使用 --body 标志,它只输出响应体而不包含请求头。
# 使用 jq 从 JSON 响应中提取字段
http GET https://api.example.com/users/1 | jq '.name'
# 仅输出响应体(不含请求头)
http --body GET https://api.example.com/health
# 从文件批量发送不同数据
while read -r line; do
http POST https://api.example.com/items $line
done < items.txt
Httpie 通过 --print 标志支持输出格式:H(请求头)、B(请求体)、h(响应头)、b(响应体)。--print=hb 组合只显示响应头和响应体。--pretty=all 标志启用带缩进的彩色格式化。
Httpie 通过 HTTPIE_COLORS 变量支持自定义。为 URL、请求头、JSON 和状态码设置颜色。内置主题:autumn、borland、fruity、monokai、native、tango,适用于不同终端。
要以编程方式处理,请使用 --body --pretty=none,它返回原始 JSON。紧凑的输出便于在脚本中自动化 API 测试时传递给 jq、sed 和其他解析器。
Httpie 通过 --print 标志支持多种输出格式:H(请求头)、B(请求体)、h(响应头)、b(响应体)。--print=hb 组合只显示响应头和响应体,排除有关连接的元信息。--pretty=all 标志启用带缩进的彩色格式化,以提高可读性。
Httpie 通过环境变量 HTTPIE_COLORS 支持自定义颜色。您可以为 URL、请求头、JSON 键和响应状态码设置颜色。内置主题:autumn、borland、fruity、monokai、native 和 tango,适用于不同类型的终端和个人偏好。
要以编程方式处理输出,请使用 --body --pretty=none 标志组合,它返回不带颜色和缩进的原始 JSON。紧凑的输出便于在 shell 脚本中自动化 REST API 测试时传递给 jq、sed 和其他控制台解析器。
常见问题
Httpie 为基本操作提供无需标志的、更易读的语法、自动 JSON 序列化、响应的彩色高亮以及内置会话支持。cURL 对于底层操作仍然不可或缺:处理 FTP、SMTP 和非标准协议。
使用 -f 标志(或 --form):http -f POST example.com name=John file@~/photo.jpg。Httpie 将自动设置 Content-Type: multipart/form-data。不使用 -f 标志时,数据以 application/json 形式发送。
是的,Httpie 支持 HTTPS。对于自签名证书,请使用 --verify=no 标志。要指定自定义 CA 文件:--verify=/path/to/cert.pem。默认情况下,证书验证已启用。
不可以,Httpie 不支持 WebSocket,仅用于 HTTP/HTTPS 协议。对于 WebSocket,请使用 websocat 或 wscat。Httpie 专注于 REST、GraphQL 和文件操作。
使用 -d(download)标志:http -d GET https://example.com/file.zip。Httpie 将以 Content-Disposition 请求头或 URL 中的原始名称保存文件。要自定义名称,请指定 -o output.zip。
总结
http [method] URL [key=value] [Header:value]对大多数请求无需标志。我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。