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

Download history 142/week @ 2024-04-08 18/week @ 2024-04-15 163/week @ 2024-04-22 106/week @ 2024-05-06 7/week @ 2024-05-13 9/week @ 2024-05-20 3/week @ 2024-06-10

608 每月下载量

MIT 协议

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 将提示用户从菜单中选择一个值,使用箭头键或模糊搜索。

数组中的每个值都可以指定为一个简单的标量值(字符串、数字等),或者每个都可以指定为一个包含 namevalue 的表。用户将看到 name 进行选择,并将 value 插入到请求中。这种用例的典型用途是当 API 使用不便选择的数值 ID 时。

也可以从响应中提取替换值的列表。考虑一个具有类似 GET /applesGET /apple/{{apple_id}} 的端点的 API。要能够调用第二个端点,我们可以设置第一个端点提取所有可用 ID 的列表。此提取的语法如下

[_extract]
apple_id = { _ = "$", name = "$.name", value = "$.id" }

有三个 JSON-path 表达式。键 _ 指定如何从响应中提取列表。它假定指向一个 JSON 数组。在这种情况下,符号 $ 仅表示整个响应应包含一个数组。在其他情况下,我们可能需要像 $.items$.data 等等。

其他 JSON-paths,namevalue 指的是数组中每个对象内的数据。

Flurry 疾跑攻击

可以使用 hitman 对 API 进行简单的性能/压力测试。这通过在命令行中给出 --flurry N 实现,其中 N 是要发送的请求数量。在此模式下,当前不支持交互式提示,因此只能在所有替换值都在作用域中、有回退值或在命令行中给出时使用。

默认情况下,它使用10个并行连接尽可能快地执行N个请求。可以使用--connections选项指定连接数。例如,--flurry 100 --connections 100将尝试并行发送所有100个请求。

监视模式

存在一个--watch选项,该选项将使Hitman持续监视文件变化,并在每次文件变化时重新执行相同的请求。监视文件变化包括请求文件本身以及不同的配置文件。

目前,当Hitman从请求中提取变量时更新的'data'文件不进行监视,因为它可能会创建无限循环。

依赖关系

~20–37MB
~538K SLoC