Hookbin – 捕获并检查 HTTP 请求

Avatar of Przemek Matylla
Przemek Matylla

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

以下是 Przemek Matylla 的客座文章,他创建了一个我认为对你们中的一些人非常有用的工具。Web 开发中存在许多神秘之处。此变量在执行的此刻是什么值?为什么覆盖此属性?是什么导致了这个滚动条?HTTP 请求也存在神秘之处。随附了哪些数据?元数据是什么?是否按预期存在(以及不存在)所有内容?希望 Przemek 的工具能够提供帮助。

2018 年 9 月更新:此服务似乎已停止运行。读者 Ankit Jain 建议使用其他服务,例如 BeeceptorMockbin 或(自托管)RequestBin

2018 年 11 月更新:Przemek 写信说,由于遭到极端滥用,该服务已离线,但现在已重写并重新启动,并且对攻击更具弹性。

在处理 Webhook、接收或发送表单数据或仅发出标准 HTTP 请求时,您可能会对有效负载中究竟包含什么感到困惑。HTTP 标头是什么?您的多部分上传发生了什么?

幸运的是,有一个名为 Hookbin(免责声明:我创建了它)的简洁工具可以大大减少调试 HTTP 请求的痛苦。让我们快速了解一下该工具以及我们可以用它实现什么。

什么是 Hookbin?

Hookbin 是一项免费服务,允许您拦截、解析和调试任何类型的 HTTP 请求。通过提供易失的唯一 URL(称为“端点”),它使您能够对该端点发出请求并检查究竟传输了什么内容。有许多可能的用例。举几个例子

  • 调试来自外部提供商的 Webhook,例如 Stripe 或 Recurly 等支付系统,然后再投入生产
  • 调试应用程序中的表单,以帮助正确设置控制器
  • 解析多部分请求(文件上传)

如何使用 Hookbin

首次访问 Hookbin 首页时,您会看到一个大型按钮,上面写着“创建新端点”。在下方,有一个名为“设为私有”的选项,用于创建结果仅在您创建它的浏览器中可见的端点(请参阅以下有关私有端点的说明)。现在,让我们创建一个标准端点。单击该按钮,您的浏览器将导航到您唯一的端点结果列表。

在页面顶部,您会看到实际的端点 URL,您可以在应用程序中使用它,例如 https://hookb.in/voOD1NJ8。请注意,端点的域名不同——hookb.in 而不是 hookbin.com。Hookbin.com 是您查看请求的地方,而 hookb.in 仅用于端点。

Hookbin 会将每个唯一的端点保持活动状态 7 天(从创建之日起),并允许您每个端点最多存储 100 个请求。一旦端点达到此限制,最旧的结果将被删除以释放空间以供新的结果使用。

获得唯一的端点 URL 后,我们就可以开始使用它了。在页面底部,您会找到针对该端点的具有 JSON 有效负载的POST请求的几个示例,这些示例使用各种编程语言编写。

让我们从一些超级简单的事情开始:GET请求。复制您唯一的端点 URL,并在新的浏览器选项卡中导航到它。在成功请求后,Hookbin 将始终返回200 OK状态代码和 JSON {"success": true}

不错。现在关闭该选项卡并返回 Hookbin.com,您可以在其中查看结果(刷新页面)。

您会看到存储的该 HTTP GET 请求的结果。让我们看看请求中有什么。每个结果都细分为以下易于折叠的部分

  • HTTP 标头(请求和响应)
  • 查询字符串
  • 正文
  • 文件上传
  • Cookie

HTTP 标头

第一部分提供了请求中传输的 HTTP 标头。Hookbin 的独特之处在于它同时提供了请求响应标头。同样重要的是要注意,Hookbin 会过滤掉可能由请求源和 Hookbin 服务器之间的代理服务器添加的任何标头。这意味着您实际上只会看到在请求中显式设置的标头,以及响应中传输回的标头。不再有您没有显式设置的噪音或未知标头。

查询字符串

将数据作为 URL 的一部分进行传输非常常见。附加到端点 URL 的所有查询字符串都将在此处作为键值对显示。要检查它是什么样子,只需将查询字符串附加到您的唯一端点 URL,例如 ?name=john,在另一个选项卡中打开该 URL 并返回 Hookbin.com。

正文

此部分提供请求的POST正文,并以醒目的方式突出显示。现在是 2016 年,大多数服务都以 JSON 格式发送其数据。现在让我们使用 cURL 发出这样的请求,看看它是什么样子

curl -X POST -H "Content-Type: application/json" -d '{"name": "John", "age": 32, "buddies": ["Paul", "Bob", "Adam"]}' https://hookb.in/voOD1NJ8

Hookbin 与请求类型无关,这意味着它将解析并存储所有类型的请求:JSON、XML、YAML、多部分或 URL 编码。

文件上传

现在谁不通过 HTTP 发送文件?现在让我们了解如何使用 Hookbin 拦截多部分请求(文件上传)。假设您在当前工作目录中具有image.jpg,您可以使用 cURL 上传文件,如下所示

curl -X POST --form [email protected] https://hookb.in/voOD1NJ8

Hookbin 将所有上传存储在短暂的 AWS S3 存储桶中,其 TTL(生存时间或过期时间)设置为从文件上传那一刻起 7 天。在此时间之后,它们将被自动且不可逆地删除。如果您不想等待整整 7 天的周期,则可以通过单击一次来按需删除单个文件。

请注意,Hookbin 将解析并保存大小不超过 1MB 的 HTTP 请求——包括正文和标头。如果您发送的请求大于 1MB,Hookbin 将响应413 Request Entity Too Large并拒绝它。

Cookie

请求中传输的任何 HTTP Cookie 都将在此处作为键值对显示。想试试吗?这是一个 cURL 单行命令

curl -X GET --cookie "motto=never_gonna_give_you_up" https://hookb.in/voOD1NJ8

私有端点

还记得在 Hookbin 的首页上创建新端点时的那个复选框吗?选中后,您创建的端点将变为“私有”,这意味着它将仅在您用于创建该端点的浏览器中可见。其他人将无法访问存储的结果。

添加笔记

如果我们无法为每个 HTTP 请求添加快速笔记以跟踪应用程序中的更改,那么存储的 HTTP 请求有什么用呢?Hookbin 允许您执行此操作。在每个请求的右上角,您会找到一个名为“添加笔记”的按钮。这使您可以存储最多 1,000 个字符的文本。您可以删除和编辑您的笔记。

删除结果

如果您不需要所有存储的结果,可以使用每个结果右上角标有“删除结果”的红色按钮删除单个结果。

隐藏功能

  • Hookbin 提供了完全开放的 CORS 实现,因此您可以在 JS 应用程序中测试 HTTP 请求。
  • Hookbin 支持方法覆盖。
  • 仅安全连接 - Hookbin 仅提供 SSL 保护的端点,并在 SSL Labs 测试中获得 A+ 等级。
  • Hookbin 在高可用性设置中运行。

技术

Hookbin 是一对 Node 应用程序。“拦截器”位于 hookb.in 后端,Web 界面位于 hookbin.com。在 Node 应用程序前面运行着 Nginx 服务器,用于 SSL 终止和请求的初步验证,然后这些请求被反向代理到 Node 后端。Web 界面应用程序使用 Angular 编写,所有资产都由 CDN 提供。

我们为什么要构建 Hookbin?

Kraken.io,我们每天都处理 Webhook,将数十万(有时数百万)个 Webhook 传送到世界各地,以通知应用程序已完成的图像调整大小和优化处理。我们最初为自己的目的在内部开发了该服务。一旦我们意识到该产品经过完善且与平台无关,我们就决定分享这份成果,使其公开可用。我们希望您会发现它有用!