Webhook Tester
Тестер вебхуков — это временный публичный адрес, который записывает каждый отправленный на него HTTP-запрос, чтобы вы видели, что именно на самом деле доставил отправитель вебхуков. Создайте хук ниже, и вы получите уникальный URL, который живёт 30 минут: направьте на него Stripe, GitHub, платёжного провайдера, сервис мониторинга или свой собственный код, вызовите событие, и каждая доставка окажется здесь — метод, путь и запрос, заголовки, тело и адрес источника — для проверки перед подключением настоящего обработчика.
Последнее обновление:
Ваш временный URL приёма — отправляйте вебхуки сюда
Скопировано в буфер обмена.
·
Предупреждение: любой, у кого есть этот URL, может отправлять на него запросы И читать всё, что он захватывает, — обращайтесь с ним точно как с паролем. Никогда не делитесь им публично и не направляйте на него рабочий трафик с секретами или персональными данными. Хук и все его захваты автоматически удаляются через 30 минут.
Захваченные запросы
Запросов пока нет. Отправьте тестовую доставку на URL выше — эта страница проверяет новые поступления каждые 3 секунды и показывает их здесь, самые новые первыми.
Хук удалён. URL больше не принимает запросы, и всё, что он захватил, исчезло.
Что хранит этот сервис — и чего он никогда не делает
Создание хука сохраняет на сервере проверки SysOSX только id хука, время его создания и истечения и адрес, который его создал. Каждый захваченный запрос хранит время прибытия, метод, путь со строкой запроса, заголовки точно как отправленные, тело до 256 КБ (всё, что длиннее, обрезается и помечается) и адрес отправителя. Хук хранит не более 50 запросов; дальнейшие доставки отклоняются до истечения срока. Всё удаляется через 30 минут после создания хука или немедленно, когда вы нажимаете кнопку удаления. Приёмник только принимает: он никогда ничего не запрашивает, ни за чем не следует и ничего не повторяет — захваченный запрос не вызывает никаких исходящих обращений. Соседний инструмент отладки — трассировщик цепочек статусов HTTP, а полный рабочий процесс описан в статье отладка вебхуков без сантехники.
Почему отлаживать вебхуки без приёмника неудобно
Вебхук — это чужой сервер, который вызывает ваш по своему расписанию в ответ на событие, которое вы не контролируете: успешный платёж, пришедший пуш, сработавшую тревогу. Именно эта форма делает вебхуки мучительными в отладке. Отправитель не может достучаться до вашего ноутбука, поэтому для локальной разработки нужен туннель или публичная промежуточная машина, прежде чем вы увидите хоть одну настоящую доставку; событие может быть трудно вызвать дважды, поэтому единственную доставку, которую вы получите, лучше захватить полностью; а когда что-то идёт не так, панель отправителя обычно показывает только код статуса, который вернул ваш эндпоинт, а не то, что он на самом деле отправил. Был ли заголовок подписи? Было ли тело той JSON-формой, которую обещала документация, или оно было закодировано как форма? Отправила ли повторная попытка тот же id события? Ни на один из этих вопросов нельзя ответить только по журналам вашего обработчика, если обработчик отклонил запрос до того, как записал его, — а именно так происходит с ошибками подписи и разбора, которые доминируют в отладке вебхуков.
Временный приёмник убирает сантехнику из этого цикла. Вместо того чтобы развёртывать наполовину написанный обработчик только ради того, чтобы увидеть, что приходит, вы создаёте адрес, который принимает всё, честно записывает и показывает вам: заголовки в том порядке и регистре, в котором они прибыли, сырое тело до того, как у любого парсера появился шанс его отклонить, строку запроса, в которой отправители иногда прячут параметры, и точный метод — потому что одни провайдеры доставляют через POST, другие через PUT, а немногие проверяют состояние через GET. С одной настоящей захваченной доставкой на экране вы можете писать обработчик по правде, а не по документации, построить фикстуру для тестов из реальной полезной нагрузки и сравнить неудавшуюся повторную попытку с оригиналом бок о бок. Затем вы удаляете хук, направляете провайдера на ваш настоящий эндпоинт и вызываете событие ещё раз, чтобы посмотреть, как ваш собственный обработчик на него отвечает. Тридцать минут — намеренно мало: достаточно для сеанса отладки и достаточно мало, чтобы забытый тестовый адрес, полный захваченных нагрузок, не болтался в интернете.
Часто задаваемые вопросы
Как долго живёт хук и сколько он может захватить?
Хук живёт 30 минут с момента создания; после этого хук и всё, что он захватил, автоматически удаляются. Он хранит до 50 запросов; доставки сверх этого отклоняются с ответом 429 до истечения срока хука. Каждое тело запроса хранится до 256 КБ — более длинное тело обрезается, и захват помечается как обрезанный, чтобы вы знали, что видите не всё.
Кто может видеть то, что захватывает мой хук?
Любой, у кого есть URL хука. Id в URL — единственное удостоверение: оно разрешает и отправку запросов, и чтение захватов, без аккаунта и пароля поверх. Именно это делает инструмент мгновенно удобным в использовании, и именно поэтому обращаться с URL следует как с паролем — не публикуйте его и никогда не направляйте рабочий трафик с секретами или персональными данными на общий просмотрщик вроде этого.
Отвечает ли приёмник отправителю, переходит ли по ссылкам или повторяет ли запросы?
Нет. Приёмник отвечает на каждую принятую доставку небольшим JSON-подтверждением 200 о том, что она прибыла, и больше ничего с ней не делает: он никогда не запрашивает URL, найденные в полезной нагрузке, никогда не следует за перенаправлениями и не предлагает повтора или пересылки. Приём и проверка — вот и весь сервис, что не даёт захваченной нагрузке превратиться в исходящий трафик.
Каких отправителей можно тестировать с этим?
Всё, что может отправить HTTP-запрос на публичный URL: Stripe, GitHub, Shopify, платёжных и формовых провайдеров, сервисы мониторинга и CI, IoT-устройство или ваш собственный код на curl. Создайте хук, вставьте URL в настройки вебхуков провайдера (или в свой скрипт), вызовите событие и смотрите, как доставка прибывает сюда за считанные секунды. Не забудьте потом убрать тестовый URL у провайдера или направить его на ваш настоящий обработчик.