Что это такое?
Whistle — это кроссплатформенный веб-прокси для отладки, построенный на Node.js. Он перехватывает и позволяет изменять трафик HTTP, HTTPS, HTTP/2, WebSocket и TCP — из той же ниши, что Charles или Fiddler (оба входят в темы проекта на GitHub).
Это десктопное приложение или то, что запускают из терминала?
И то и другое: на macOS, Windows и Linux есть клиент Whistle, который избавляет от большей части ручной настройки, а на серверах всё управляется командами w2 — и в обоих случаях перехват, правила и плагины настраиваются в одном встроенном интерфейсе.
Как его запустить?
Четыре шага: npm i -g whistle (или brew install whistle), w2 start для запуска, w2 ca для установки корневого HTTPS-сертификата и w2 proxy, чтобы направить трафик на него (w2 proxy 0 отключает системный прокси). Пользователям десктопной версии большинство этих шагов пропускается благодаря клиенту Whistle.
Нужно ли что-то предустановленное, чтобы он заработал?
Node.js — whistle распространяется как npm-пакет, и в его конфигурации указан Node 14 или новее. На macOS альтернативный способ установки — Homebrew.
Какая часть настройки самая хлопотная?
Перехват HTTPS: нужно установить корневой сертификат whistle (w2 ca), и система проведёт вас через это вручную — на Windows нужно выбрать «Да», а macOS может запросить пароль учётной записи или Touch ID.
На каких системах он работает?
macOS, Windows и Linux, причём отдельно упомянуты Ubuntu и Fedora; ничто не привязывает его к какой-то одной операционной системе.
Он запустится на сервере без графического интерфейса или ему нужен десктоп?
Да — работа на Linux-серверах без графики явно поддерживается; описанный выше вариант установки через командную строку создан именно для таких машин.
Что он умеет, кроме пассивного перехвата трафика?
Многое: можно переписывать запросы и ответы через правила, повторять и редактировать запросы во встроенном Composer, смотреть DOM удалённой страницы через Weinre и видеть вывод консоли страницы — и всё это в том же интерфейсе.
А если я не могу или не хочу настраивать системный прокси?
Whistle также работает как HTTP-, HTTPS-, Socks- или обратный прокси. В README рекомендуется расширение ZeroOmega для Chrome, чтобы переключать прокси между браузерами, и Proxifier — для приложений, у которых нет собственных настроек прокси.
Могу ли я расширять его или встроить в свой проект?
Да — плагины расширяют и правила, и интерфейс, а сам whistle можно подключить в проект и использовать как NPM-модуль.
What are similar projects?
proxypin, nginx, goproxy, nginx-proxy, portless, http-proxy-middleware, mitmproxy, caddy
Which topics is it in?
debug, hosts, http2, mitm, http-proxy, proxy-server, https, devtools, reverse-proxy, debugging, node, websocket