HTTPie
2026/5/29工具工具Web安全httpie大约 4 分钟
HTTPie
是什么
HTTPie(原名 HTTPie CLI)是一款现代化的命令行 HTTP 客户端工具,设计理念是让命令行下的 HTTP 请求变得尽可能人性化和直观。相比传统的 curl,HTTPie 提供了更友好的语法、彩色输出、JSON 自动处理等特性。
在 CTF 竞赛中,HTTPie 常用于:
- 快速测试 Web API 接口
- 发送构造好的 HTTP 请求
- 调试 Web 应用的请求与响应
- 替代 curl 进行更高效的交互
核心特性:
- 直观的命令语法(类似自然语言表达)
- 内置 JSON 支持(自动设置 Content-Type 和格式化输出)
- 彩色高亮的请求/响应展示
- 支持会话持久化(自动保存 Cookie)
- 支持插件扩展
- 跨平台支持(Linux、macOS、Windows)
安装与配置
安装方法
# macOS(Homebrew)
brew install httpie
# Ubuntu/Debian
sudo apt update
sudo apt install httpie
# CentOS/RHEL
sudo yum install epel-release
sudo yum install httpie
# Windows(Scoop)
scoop install httpie
# Windows(pip)
pip install httpie
# Windows(Chocolatey)
choco install httpie
# Kali Linux(预装)
http --version验证安装
http --version
# 输出类似:HTTPie 3.2.2
# 测试请求
http httpbin.org/get配置文件
配置文件路径:
- Linux/macOS:
~/.config/httpie/config.json - Windows:
%APPDATA%\httpie\config.json
{
"default_options": ["--timeout=30"],
"output_options": [],
"implicit_content_type": "application/json"
}输出样式配置
# 设置输出颜色主题
http --style=monokai httpbin.org/get
# 可用主题:autumn, borland, colorful, default, emacs, friendly, fruity, github, igor, manni, monokai, murphy, native, paraiso-dark, paraiso-light, pastie, perldoc, rrt, tango, trac, vim, vs, xcode, zenburn基本用法
HTTP 方法
# GET 请求(默认方法)
http httpbin.org/get
# 显式指定 GET
http GET httpbin.org/get
# POST 请求
http POST httpbin.org/post name=test age=18
# PUT 请求
http PUT httpbin.org/put name=updated
# PATCH 请求
http PATCH httpbin.org/patch name=patched
# DELETE 请求
http DELETE httpbin.org/delete
# HEAD 请求
http HEAD httpbin.org/get
# OPTIONS 请求
http OPTIONS httpbin.org/get传递请求参数
# 查询字符串参数(GET 参数)
http httpbin.org/get name==admin page==1
# 等价于 GET /get?name=admin&page=1
# POST 表单数据
http --form POST httpbin.org/post username=admin password=123
# POST JSON 数据(默认行为)
http POST httpbin.org/post username=admin password:=123 active:=true
# := 表示非字符串类型(数字、布尔值、null 等)
# 嵌套 JSON
http POST httpbin.org/post user[name]=admin user[age]:=25 user[tags][]:='["ctf","web"]'
# 从文件读取 JSON
http POST httpbin.org/post < data.json
# 使用管道
echo '{"name":"test"}' | http POST httpbin.org/post设置请求头
# 自定义 Header
http httpbin.org/get X-Custom-Header:value User-Agent:"Mozilla/5.0"
# 多个 Header
http httpbin.org/get \
X-Forwarded-For:127.0.0.1 \
Content-Type:application/json \
Authorization:"Bearer token123"Cookie 操作
# 通过 Header 设置 Cookie
http httpbin.org/get Cookie:"session=abc123; user=admin"
# 使用会话(自动管理 Cookie)
http --session=mysession httpbin.org/cookies/set/name/admin
http --session=mysession httpbin.org/cookies认证
# Basic 认证
http -a username:password httpbin.org/basic-auth/username/password
# Digest 认证
http --auth-type=digest -a username:password httpbin.org/digest-auth/username/password
# Bearer Token
http httpbin.org/get Authorization:"Bearer eyJhbGciOiJIUzI1NiJ9..."输出控制
# 只显示响应头
http --print=h httpbin.org/get
# 只显示响应体
http --print=b httpbin.org/get
# 只显示请求头
http --print=H httpbin.org/get
# 显示请求和响应的所有信息
http --print=HhBb httpbin.org/get
# 下载文件
http --download httpbin.org/image/png
# 输出到文件
http httpbin.org/get > response.txt
# 保存响应到指定文件
http --output=result.json httpbin.org/get重定向跟随
# 跟随重定向
http --follow httpbin.org/redirect/3
# 查看重定向链
http --follow --all httpbin.org/redirect/3超时设置
# 设置超时时间
http --timeout=30 httpbin.org/delay/5代理设置
# 使用 HTTP 代理
http --proxy=http:http://127.0.0.1:8080 httpbin.org/get
# 使用 SOCKS 代理
http --proxy=http:socks5://127.0.0.1:1080 httpbin.org/getCTF常用技巧
测试 API 接口
# 测试 RESTful API
http GET http://challenge.ctf.com/api/users
http POST http://challenge.ctf.com/api/users name=admin role:=1
http PUT http://challenge.ctf.com/api/users/1 name=updated
http DELETE http://challenge.ctf.com/api/users/1
# 修改 JSON 字段值进行权限测试
http POST http://challenge.ctf.com/api/login username=admin role:="\"admin\""绕过前端限制
# 直接发送请求绕过前端验证
http POST http://challenge.ctf.com/submit flag="flag{test}" hidden_field:=true
# 修改 Content-Type 测试解析差异
http --form POST http://challenge.ctf.com/upload file@shell.php文件上传
# 上传文件
http --form POST http://challenge.ctf.com/upload file@/path/to/shell.php
# 修改文件名和 Content-Type
http --form POST http://challenge.ctf.com/upload \
file@shell.jpg;filename=shell.php \
Content-Type:application/x-php编码绕过
# URL 编码特殊字符
http http://challenge.ctf.com/search q=="<script>alert(1)</script>"
# 使用 Base64 编码 Payload
http POST http://challenge.ctf.com/api data="PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="Session 管理
# 创建会话并保持登录状态
http --session=admin_session POST http://challenge.ctf.com/login \
username=admin password=admin123
# 使用已登录会话访问受保护资源
http --session=admin_session http://challenge.ctf.com/admin/dashboard
# 查看会话文件
cat ~/.config/httpie/sessions/challenge.ctf.com/admin_session.json响应分析
# 只看状态码
http --print=h http://challenge.ctf.com/api/flag 2>&1 | head -1
# 查看 Set-Cookie 头
http --print=h http://challenge.ctf.com/ | grep -i set-cookie
# 美化 JSON 响应
http http://challenge.ctf.com/api/data | python -m json.tool与 curl 对比
| 功能 | HTTPie | curl |
|---|---|---|
| 发送 JSON | http POST url key=val | curl -X POST -d '{"key":"val"}' -H "Content-Type: application/json" url |
| 文件上传 | http --form url file@f | curl -F "file=@f" url |
| 自定义 Header | http url Key:Val | curl -H "Key: Val" url |
| Basic 认证 | http -a user:pass url | curl -u user:pass url |
| 跟随重定向 | http --follow url | curl -L url |
| JSON 输出格式化 | 自动 | 需要配合 jq |
| Cookie 管理 | --session | -b/-c cookie jar |
常见问题
Windows 下颜色显示异常
解决:使用 Windows Terminal 或启用 ANSI 支持:
# 使用 --no-color 禁用颜色
http --no-color httpbin.org/get中文乱码
解决:
# 设置正确的编码
http httpbin.org/post name="测试" --encoding=utf-8HTTPS 证书错误
解决:
# 忽略 SSL 证书验证
http --verify=no https://self-signed.example.com/
# 使用自定义 CA 证书
http --verify=/path/to/cert.pem https://example.com/复杂 JSON 构造
# 使用 --json 选项强制 JSON
http --json POST httpbin.org/post key=value
# 嵌套对象
http POST httpbin.org/post user.name=admin user.age:=25 user.role=superadmin
# 数组
http POST httpbin.org/post tags:='["web","ctf","pwn"]'请求体过大
解决:
# 从文件读取
http POST http://challenge.ctf.com/api < large_payload.json