8个版本 (破坏性)
0.8.0 | 2024年5月10日 |
---|---|
0.7.1 | 2024年4月22日 |
0.5.0 | 2024年2月19日 |
0.4.0 | 2024年2月2日 |
0.1.0 | 2023年12月31日 |
#24 in #toml-config
608 每月下载量
105KB
3K SLoC
HITMAN
用于调用API端点的命令行工具。
基本设置
创建你的项目文件夹,其中包含一个TOML配置文件,以及针对你想要调用的每个API的HTTP请求文件。
示例布局
project
├── hitman.toml
├── login.http
├── apple/get_apples.http
├── apple/post_new_apple.http
├── apple/delete_apple.http
HTTP文件是直接HTTP请求的模板。双大括号中的变量将用配置文件中的值替换。
POST {{base_url}}/login HTTP/1.1
Content-Type: application/json
{
"username": "{{api_username}}",
"password": "{{api_password}}"
}
配置文件可以包含全局默认变量和特定目标的变量。它必须至少包含一个目标,作为TOML表
api_username = "admin"
[default]
base_url = "http://example.com"
[development]
base_url = "https://127.0.0.1:8080"
除了主配置文件 hitman.toml
之外,还可以有另一个名为 hitman.local.toml
的文件。建议的设置是在共享仓库中有一个 hitman.toml
,并且有一个git忽略的 hitman.local.toml
,其中每个团队成员都可以有自己的个人凭据等。
替换可以是嵌套的,因此变量可以包含对其他变量的引用。例如
authorization_header: "Authorization: Bearer {{auth_token}}"
请注意,由于目前没有循环引用的保护,类似 foo: "{{foo}}"
的东西很可能会溢出并崩溃。
运行
首先,选择要使用的目标
$ hitman --select
? Select target ›
default
development
然后通过传递请求文件直接运行请求
$ hitman login.http
或,使用交互模式
$ hitman
? Make request ›
login.http
apple/get_apples.http
apple/post_new_apple.http
apple/delete_apple.http
捕获响应
HITMAN 的核心概念是从响应中提取值,以便它们可以在模板中引用并在后续请求中替换。
一个典型用例是从登录响应中捕获令牌,并在后续请求的授权头中使用它。
我们可以在主配置文件中定义如何提取值,但更常见的是,我们可以为单个请求定义它们。通过创建一个与请求文件同名,扩展名为 .http.toml
的文件来添加特定于请求的配置。
_extract
部分 定义了从响应中提取哪些值,作为 JSON-path 表达式。
# login.http.toml
[_extract]
access_token = "$.result.access_token"
refresh_token = "$.result.refresh_token"
当接收到成功的登录响应时,这些值将被提取并保存为配置变量,这些变量可以在其他请求中使用
GET {{base_url}}/apple HTTP/1.1
Authorization: Bearer {{access_token}}
回退值
变量表达式可以有一个默认值,用管道字符表示:{{user_id | 1000}}
。
在执行此请求时,如果没有作用域中的 user_id
值,hitman 将使用回退值,具体取决于它的调用方式。
默认情况下,hitman 将要求用户输入值。提示将显示给用户,如果用户简单地按 Enter,将使用默认值,而不是空字符串。
在非交互式模式下(-n
,--flurry
等),将使用回退值而不会提示用户,除非在配置文件中指定了值或在命令行中给出。
列表值选择
在配置文件中,可以指定变量的多个值,作为 TOML 数组。默认情况下,hitman 将提示用户从菜单中选择一个值,使用箭头键或模糊搜索。
数组中的每个值都可以指定为一个简单的标量值(字符串、数字等),或者每个都可以指定为一个包含 name
和 value
的表。用户将看到 name
进行选择,并将 value
插入到请求中。这种用例的典型用途是当 API 使用不便选择的数值 ID 时。
也可以从响应中提取替换值的列表。考虑一个具有类似 GET /apples
和 GET /apple/{{apple_id}}
的端点的 API。要能够调用第二个端点,我们可以设置第一个端点提取所有可用 ID 的列表。此提取的语法如下
[_extract]
apple_id = { _ = "$", name = "$.name", value = "$.id" }
有三个 JSON-path 表达式。键 _
指定如何从响应中提取列表。它假定指向一个 JSON 数组。在这种情况下,符号 $
仅表示整个响应应包含一个数组。在其他情况下,我们可能需要像 $.items
、$.data
等等。
其他 JSON-paths,name
和 value
指的是数组中每个对象内的数据。
Flurry 疾跑攻击
可以使用 hitman 对 API 进行简单的性能/压力测试。这通过在命令行中给出 --flurry N
实现,其中 N
是要发送的请求数量。在此模式下,当前不支持交互式提示,因此只能在所有替换值都在作用域中、有回退值或在命令行中给出时使用。
默认情况下,它使用10个并行连接尽可能快地执行N
个请求。可以使用--connections
选项指定连接数。例如,--flurry 100 --connections 100
将尝试并行发送所有100个请求。
监视模式
存在一个--watch
选项,该选项将使Hitman持续监视文件变化,并在每次文件变化时重新执行相同的请求。监视文件变化包括请求文件本身以及不同的配置文件。
目前,当Hitman从请求中提取变量时更新的'data'文件不进行监视,因为它可能会创建无限循环。
依赖关系
~20–37MB
~538K SLoC