如果你曾经为 curl 的语法而苦恼——-X POST -H "Content-Type: application/json" -d '{"key":"value"}'——并认为一定有更好的方法,那么你并不孤单。
xh 是一个由 Rust 驱动的命令行 HTTP 客户端,它以远胜于 HTTPie 的性能,重新实现了 HTTPie 的直观设计。
什么是 xh?
xh 是一个友好、快速的 HTTP 请求发送工具。它用 Rust 编写(90% 的代码库),以单个静态二进制文件发布,并将 HTTPie 优雅的语法带到了 Rust 生态系统中。
xh httpbin.org/json
一条命令。彩色 JSON 输出。不再需要考古式地查阅参数。
主要特性
| 特性 | 详情 |
|---|---|
| Rust 驱动 | 相比 Python 的 HTTPie,启动几乎瞬时 |
| 单个二进制文件 | 无需运行时,易于安装,方便移植 |
| HTTP/2 支持 | 原生支持,无需额外标志 |
| 默认使用 rustls | 不依赖系统 TLS——在较旧发行版上也能工作 |
--curl 标志 |
将任意 xh 命令转换为等效的 curl 命令 |
| 彩色输出 | 语法高亮的 JSON、headers 等 |
| 自动状态检查 | 除非另行指定,4xx/5xx 状态码会以错误退出 |
xh vs curl vs HTTPie
# curl——还记得所有这些标志吗?
curl -X POST https://httpbin.org/post
-H "Content-Type: application/json"
-d '{"name":"Tom","age":26}'
# HTTPie——更好,但基于 Python(启动较慢)
http POST httpbin.org/post name=Tom age:=26
# xh——快速 + 直观
xh post httpbin.org/post name=Tom age:=26
xh 的请求项语法极其简单:name=value 设置 body 字段,== 添加 URL 参数,: 设置 header。无需记忆 -d、-H、-X。
基本语法
xh [OPTIONS] <[METHOD] URL> [REQUEST_ITEM]...
请求项语法:
| 语法 | 用途 |
|---|---|
name=value |
Body 字段(字符串) |
name:=26 |
Body 字段(强制 JSON 数字) |
id==5 |
URL 查询参数 |
content-type: |
添加 header |
@file.txt |
将文件内容作为值读取 |

请求示例
# 简单 GET
xh httpbin.org/json
# 带查询参数的 GET
xh get httpbin.org/json id==5 sort==true
# 带 JSON body 的 POST(自动序列化)
xh post httpbin.org/post name=Tom age:=26
# 自定义 headers
xh httpbin.org/get user-agent:MyApp/1.0 x-api-key:secret
# 从文件读取 body
xh post :8080/api/bulk @data.json
# 下载到文件
xh -d https://httpbin.org/json -o response.json
# 持久化 session(cookie 处理)
xh :8080/login --session=login.txt
专业技巧:使用 xhs 自动启用 HTTPS
将 xh 符号链接为 xhs,它将自动使用 HTTPS:
ln -s $(which xh) ~/.local/bin/xhs
xhs httpbin.org/get # → https://httpbin.org/get
GitHub 项目信息
- 仓库:ducaale/xh
- Stars:7.9k
- 语言:Rust 90.1%
- 许可证:MIT
- 最新版本:0.24.x(积极维护中)
为什么选择 xh?
如果你经常在命令行中与 API 打交道,xh 值得一试。它将 HTTPie 符合人体工程学的语法带到了 Rust 世界——快速启动、单个二进制文件、彩色输出和合理的默认值。它就像你一直希望的那个体感更流畅的 HTTPie。
下一篇:在 Linux 上安装 xh →
评论