简介
HTTPie 是一款使用 Python 编写的命令行 HTTP 客户端,旨在让与 Web 服务的交互变得尽可能简单和直观。相比 curl 的复杂参数,HTTPie 提供了简洁的语法、彩色格式化的输出以及对 JSON 的原生支持,大幅降低了 API 调试和测试的门槛。
HTTPie 的设计哲学是”为人类设计的 HTTP 客户端”。它能自动检测和格式化 JSON 响应、支持会话持久化、提供直觉式的请求体语法,并且内置了丰富的认证方式。无论是日常 API 开发调试,还是快速测试 Web 服务,HTTPie 都能让你事半功倍。
安装
# macOS
brew install httpie
# pip
pip install httpie
# Ubuntu/Debian
sudo apt install httpie
核心特性
- 直觉语法:
http GET url替代curl -X GET url,简洁明了 - JSON 原生: 默认发送和格式化 JSON,自动设置 Content-Type
- 彩色输出: 响应头和响应体带有语法高亮和格式化缩进
- 会话支持: 支持会话持久化,自动保存 cookies 和认证信息
- 文件上传: 简单直观的文件上传和表单提交语法
- 认证内置: 支持 Basic、Digest、Bearer Token 等多种认证方式
使用示例
# GET 请求
http httpbin.org/get
# 带查询参数的 GET 请求
http httpbin.org/get name==value sort==desc
# POST JSON 数据
http POST httpbin.org/post name=John age:=30 admin:=true
# POST 表单数据
http -f POST httpbin.org/post name=John email=john@example.com
# 自定义请求头
http GET api.example.com Authorization:"Bearer token123"
# 文件上传
http -f POST api.example.com/upload file@./photo.jpg
# 下载文件
http --download https://example.com/file.zip
# 仅显示响应头
http --headers GET example.com
# 使用会话(保持 cookies)
http --session=api POST api.example.com/login user=admin pass=secret
http --session=api GET api.example.com/dashboard
# 输出请求和响应的完整信息
http --verbose POST api.example.com/data key=value
典型场景
场景一:快速测试 REST API
开发后端接口时,不用 Postman 也能方便地测试:
# 注册新用户
http POST api.example.com/auth/register \
username=alice \
password=secret123 \
email=alice@example.com
# 登录获取 token
TOKEN=$(http POST api.example.com/auth/login \
username=alice password=secret123 \
| jq -r '.access_token')
# 用 token 调用受保护接口
http GET api.example.com/profile \
"Authorization: Bearer $TOKEN"
场景二:持久化会话测试(带 Cookie)
测试需要登录状态的接口:
# 创建命名会话,自动保存 Cookie
http --session=myapp POST api.example.com/login user=admin pass=secret
# 后续请求自动携带 Session Cookie
http --session=myapp GET api.example.com/dashboard
http --session=myapp POST api.example.com/api/data key=value
# 查看会话文件
cat ~/.config/httpie/sessions/api.example.com/myapp.json
场景三:调试 Webhook 和文件上传
# 测试文件上传接口
http -f POST api.example.com/upload \
file@./report.pdf \
title="Q4 Report" \
category=finance
# 发送自定义格式的请求体(调试 Webhook)
echo '{"event":"push","ref":"refs/heads/main"}' \
| http POST localhost:8080/webhook \
Content-Type:application/json \
X-GitHub-Event:push