Httpie:是什么,面向命令行的 HTTP 客户端

作者: IT Sectr 发布日期: 2026-05-08 阅读时间: 8 分钟

Httpie — 一款控制台 HTTP 客户端,采用易于人阅读的语法和彩色输出,用于从命令行测试 API。该工具使用直观的语法:http GET https://api.example.com/users,无需为请求头和请求体指定标志。根据 Httpie CLI Documentation (2026),该工具默认支持 JSON、会话、身份验证和插件。

要点

  • Httpie — cURL 的现代替代品,具有可读的语法、彩色高亮和内置 JSON 序列化。
  • 语法请求按以下模式构建:http [method] URL [header:value] [key=value],无需额外标志。
  • 默认 JSON — 请求体被解析为 JSON 对象,Content-Type 请求头自动添加。
  • 会话在请求之间保存 cookie 和请求头,便于测试已认证的端点。
  • 插件通过支持额外格式、认证类型和自定义传输来扩展 Httpie。

什么是 Httpie,它与 cURL 有何不同

Httpie(或 HTTPie)— 一个用 Python 编写的控制台工具,与 cURL 相比简化了 HTTP 请求的发送。主要区别在于接近自然语言的语法:参数用空格分隔,请求头用冒号表示,JSON 数据用等号表示,无需转义引号。

cURL 与 Httpie 的对比

同样的 POST 请求在 cURL 中至少需要三个标志(-X、-H、-d)并手动转义 JSON。Httpie 用三个词无需标志即可完成同样的事情,自动设置 Content-Type: application/json 并为输出着色。响应默认以缩进和语法高亮格式化。

操作cURLHttpie
GET 请求curl https://api.example.comhttp GET https://api.example.com
POST JSONcurl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' https://api.example.comhttp POST https://api.example.com name=test
请求头curl -H "Authorization: Bearer token123" https://api.example.comhttp GET https://api.example.com Authorization:"Bearer token123"

Httpie 中的请求语法

Httpie 对基本参数使用统一的命令行格式,无需标志。HTTP 方法作为第一个参数(GET、POST、PUT、DELETE、PATCH),URL 作为第二个。如果省略方法,Httpie 自动选择 GET(用于无请求体的请求)或 POST(有请求体)。

参数类型

  • Header:Value — 带冒号的请求头,冒号后没有空格:Authorization:"Bearer token"
  • key=value — 请求体中的 JSON 对象字段:name=John age=30
  • key:=value — 非字符串的 JSON 值(数字、布尔值、数组):active:=true tags:=["dev","test"]
  • key@file — 从文件加载值:avatar@~/photo.jpg

Httpie 自动确定数据类型:如果传递了 key=value — 请求体作为 JSON 发送。如果通过 --raw 传递原始文本 — 作为纯文本。form-data 格式通过 -f 标志启用。

bash
# 带 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 和文件

JSON 序列化在 Httpie 中自动工作:以 key=value 形式传递的值成为 JSON 的字符串字段。对于数字和布尔值使用 key:=value。嵌套对象通过点符号创建:address.city=Moscow

上传文件和二进制数据

Httpie 支持 multipart/form-data 格式,通过 key@path 语法上传文件和数据。如果需将文件内容作为请求的原始请求体发送,则使用输入重定向:http POST example.com < file.json。要将响应下载到文件,使用 -d(download)标志。

bash
# 从文件发送 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"

管理会话和 cookie

会话在 Httpie 中保存请求之间的状态:cookie、请求头和认证参数。会话通过 --session=name 标志创建。会话数据存储在 ~/.httpie/sessions/ 文件夹中的 JSON 文件中。带有 :readonly 后缀的会话在请求后不会更新。

会话测试示例

首先使用凭据向 /auth/login 发送 POST 请求 — 服务器返回会话 cookie。同一会话中对受保护端点的所有后续请求都会自动发送已保存的 cookie,这模拟了测试移动应用 API 时浏览器的行为。

bash
# 步骤 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 和 Bearer Token

要测试使用 OAuth 2.0 的 API,令牌通过 Authorization 请求头传递。Httpie 不在内核层面管理令牌的生命周期 — 这由外部脚本完成。命令 http --auth-type=bearer --auth="$TOKEN" GET https://api.example.com/resource 相当于显式指定带令牌的请求头。

在 CI/CD 脚本中使用 Httpie

Httpie 凭借零依赖(除 Python 外)和可读的输出,非常适合 CI/CD 流水线。命令无需额外解析即可在日志中轻松读取。该工具通过 pip 安装,并可用于所有流行的 Docker 镜像,包括 Alpine、Ubuntu 以及 Jenkins 和 GitLab CI 系统的官方镜像。这使得 Httpie 成为自动化测试 REST API 和微服务的便捷选择。

部署时检查健康端点

典型场景 — 在应用部署后检查 API 状态。Httpie 向健康端点发送请求,如果响应不符合预期,则以非零代码退出。--check-status 标志在状态码 >= 300 时自动返回错误。

bash
# 部署脚本中的健康检查
http --check-status GET https://api.staging.example.com/health
    status:="ok" && \
    echo "API 健康" || \
    echo "API 检查失败"

Httpie 的高级功能和插件

Httpie 通过 Package Index 系统支持插件。插件添加新的认证类型、序列化格式和传输方式。通过 pip 安装:pip install httpie-plugin-name。安装后,插件在 Httpie 下次启动时自动激活。

流行的 Httpie 插件

  • httpie-jwt-auth — 通过 refresh token 机制自动获取和刷新 JWT 令牌。
  • httpie-oauth — 支持 OAuth 2.0 Client Credentials 和 Authorization Code 流程,自动将代码兑换为令牌。
  • httpie-editor — 在发送前于文本编辑器(vim、nano、VS Code)中打开请求体。
  • httpie-image — 直接在终端中显示响应中的图像(需要 kitty 或 iTerm2)。

脚本编写和输出解析

Httpie 通过 --pretty=format 选项支持类似 jq 的过滤,并通过 --print 支持与 cURL 兼容的输出。--quiet 标志关闭彩色输出,以便在 CI 日志中获得更好的可读性。要以编程方式处理响应,请使用 --body 标志,它只输出响应体而不包含请求头。

bash
# 使用 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,适用于不同终端。

JSON 格式输出

要以编程方式处理,请使用 --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,适用于不同类型的终端和个人偏好。

无格式化的 JSON 格式输出

要以编程方式处理输出,请使用 --body --pretty=none 标志组合,它返回不带颜色和缩进的原始 JSON。紧凑的输出便于在 shell 脚本中自动化 REST API 测试时传递给 jq、sed 和其他控制台解析器。

常见问题

Httpie 比标准 cURL 好在哪?

Httpie 为基本操作提供无需标志的、更易读的语法、自动 JSON 序列化、响应的彩色高亮以及内置会话支持。cURL 对于底层操作仍然不可或缺:处理 FTP、SMTP 和非标准协议。

如何通过 Httpie 发送 form-data?

使用 -f 标志(或 --form):http -f POST example.com name=John file@~/photo.jpg。Httpie 将自动设置 Content-Type: multipart/form-data。不使用 -f 标志时,数据以 application/json 形式发送。

Httpie 是否支持 HTTPS 和证书?

是的,Httpie 支持 HTTPS。对于自签名证书,请使用 --verify=no 标志。要指定自定义 CA 文件:--verify=/path/to/cert.pem。默认情况下,证书验证已启用。

我可以将 Httpie 用于 WebSocket 吗?

不可以,Httpie 不支持 WebSocket,仅用于 HTTP/HTTPS 协议。对于 WebSocket,请使用 websocat 或 wscat。Httpie 专注于 REST、GraphQL 和文件操作。

如何通过 Httpie 将响应保存到文件?

使用 -d(download)标志:http -d GET https://example.com/file.zip。Httpie 将以 Content-Disposition 请求头或 URL 中的原始名称保存文件。要自定义名称,请指定 -o output.zip

总结

  • Httpie — 具有直观语法、默认 JSON 和彩色输出的控制台 HTTP 客户端。
  • 基本语法http [method] URL [key=value] [Header:value]对大多数请求无需标志。
  • JSON 序列化是自动的:key=value 成为 JSON 字段,key:=value 用于数字和布尔值。
  • 会话在请求之间保存 cookie 和请求头,用于测试已认证的端点。
  • 身份验证通过 --auth-type 标志支持 Basic、Digest、Bearer 和自定义方案。
  • CI/CD 集成配合 --check-status 和零依赖,使 Httpie 便于编写部署脚本。
  • 文件上传通过 multipart form-data,使用 -f 标志和 key@file 语法。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读