Чем и как принимать и отлаживать POST запросы на локальном веб-сервере?

Рейтинг: 4Ответов: 2Опубликовано: 17.07.2025

Postman позволяет "вручную" сформировать и послапть запрос, включая body и набор заголовков. То есть он позволяет делать еще и многое другое, но вот эта возможность - послать сфомированный кастомный запрос - это его самая базовая функциональность.

Моя проблема такая: есть система ("черный ящик"), которая по определенным URL посылает запросы. По идее - это REST запросы. Сами по себе эти URL - настраиваемы, и "общий смысл" запросов известен.

Мне нужно принимать запросы, и разобраться в них детально, с точностью до полей и заголовков. То есть, мне нужен локальный "веб сервер для отладки запросов" (на него я направлю запросы из "черного ящика"). И именно в этом смысле это "наоборот, чем Postman"

Так как тема анализа трафика - довольно обширная, я уточню условия, в которых нахожусь:

  1. В моём распоряжении комп с Win 10, на котором у меня есть права локального администратора. Также, там есть среда разработки Visual Studio, и dotnet core 6.0
  2. На этом компе у меня нет прямого доступа в интернет ( то есть, я не могу открыть сайт в браузере, или написать dotnet add package <имя пакета> )
  3. Зато я могу "приносить и запускать" на комп файлы, в том числе, я могу сделать self-contained package на dotnet
  4. В "черном ящике" у меня есть десяток URL, которые я могу сконфигурировать. Каждый URL - это отдельный запрос. По названию примерно понятно для чего он, на уровне "ага, вот здесь мы передаём имя клиента чтобы его завести в другой системе". А что еще идёт вмсесте с именем, и как это имя выглядит - надо смотреть в запросе
  5. В том числе, я могу напиcать эти URL в формате http://localhost:8080/MyController/
  6. я довольно хорошо понимаю, как работает tcp, http, биндинги, и чем листенер, слушающий 127.0.0.1, отличается от листенера, слушающего 0.0.0.0. И несколько раз реализовывал примитивный WEB сервер на "древних языках".
  7. То есть, меня просто немного удивляет, что для такой задачи надо писать код, а нет какого то пакета, который ставишь, а он спрашивает "на каком порту слушать и в каком формате в лог выводить?" Ну, как Postman для запросов, или Fiddler для анализа трафика

Дополнительный вопрос: а нельзя ли Fiddler (classic) для этого как то присобачить!?

Что посоветуете?

Ответы

▲ 5Принят

Если это локально, то вам всего лишь нужно сделать свой кастомный локальный сервер)

Тут есть один важный вопрос, куда посылает запросы этот ваш чёрный ящик? Если вы можете полностью настроить, что и куда он будет отправлять, то не уверен, что вам нужно что-то делать, так как чёрный ящик уже должен предоставлять инструменты для анализа того, что он отправляет (возможно, но не точно)

Если чёрный ящик отправляет конкретные запросы по конкретным адресам, тогда вам нужен анализатор трафика, с учётом того, что данные не зашифрованные. Вот тут можете найти список приложений для подобного рода дел

Вернёмся в первой части. Если можете настроить что и куда отправляется, можете сделать через всеми известную нейросеть простенький веб-сервер на asp.net core web api, т.е. фреймворк из коробки предоставляет 95% всего что вам нужно. Или вот вам две статьи: один, два. Вам останется только правильно маршруты настроить и запустить всё через дебаг. В случае для какого-то C++ или подобного, придётся делать кастоменые http listener. Вот тут микро-статья

UPD: Отправить запрос не сложно, это вы можете сделать без особых усилий даже без сторонних приложений, просто используя cmd консоль и команду curl. Вот статья. А вот что бы принять http запрос, нужно на много больше различных манипуляций, по этому просто так не получится это сделать.

UPD2: Я не отрицаю, что есть более легкий путь, по этому, уважаемые знатоки, можете предложить свои варианты)

UPD3: Сам по себе запрос всегда имеет ip адрес и порт, а так же некую другую информацию. Тут важно понимание роли порта. Если ip адрес указывает на конкретную машину, которая имеет свой уникальный адрес в сети Интернета, то вот порт указывает, какую именно программу (пожалуйста, не бейте) нужно вызвать на конечном сервере. Суть веб-сервера в том, что он слушает этот порт и принимает все запросы, которые приходят на него. Соответственно, он может с ними работать. В этом и суть слушателей (tcpListener, httpListener и т.д.). Обычно веб-сервер, по типу asp.net и других из коробки имеют набор библиотек для работы с назначенным портом.

Если при отправке запроса вы укажите недействительный порт, ваш запрос "никто" не сможет получить, а вы так и не получите никакого ответа кроме This site can’t be reached, connection timeout, connection refused или подобного.

Ещё несколько полезных ссылок по этому поводу, в частности, подсказка @IvanShatsky:

UPD4: Относительно новых правок вопроса. Fiddler это анализатор трафика, который я предложил использовать в первом пункте ответа. Вот статья о том, как его можно легко использовать (если именно это вам нужно). Либо можете использовать другие программы, который указаны в первой части.

Так же я привёл пример использования для таких задач фреймворк asp.net web api, но вы можете это сделать и на других языках/фреймворках, если у вас могут быть проблемы с этим. Среди вариантов:

Если у вас нет интернета, и вы не можете прям что-то поставить, попробуйте написать вручную, это так же не очень тяжело. Всё что вам понадобится это, опять же, какой-то HttpListener назначенный на определённый порт. Но для этого вам всё равно нужно будет поставить, хотя бы, Visual Studio или другую IDE.

Но если у вас чисто голый Windows, то будет немного тяжело это сделать, так как хотя бы что-то у вас должно быть, из коробки ничего нет)

▲ 1

В любом случае нужен веб сервер, например apache с php.

Я часто решаю задачи интеграции со сторонними системами и мне приходится разбирать чужие запросы в самых экзотических форматах. Но начинать всегда можно вот с такого простенького PHP скрипта:


logg($_SERVER); //Тут состояние сервера и заголовки
logg($_POST); //Тут POST (если x-www-form-urlencoded)
logg($_GET); //Параметры урла
logg($_FILES); //Если переданы файлы (при multipart/form-data)
logg(file_get_contents('php://input')); //Сырое тело поста на все остальные случаи, например application/json

//Универсальная функция для логирования всего.
//у меня она очень большая, приведу достаточный минимум

//Для удобства функция принимает любое кол-во аргументов
function logg(...$args){
    $logfile='/var/log/my.log';
    $str='';
    foreach($args as $txt){
        //Если массив, выводим кол-во элементов и структуру 
        if(is_array($txt) || is_object($txt)){
            $str.="Count: ".count($txt)." Count total: ".count($txt,1)."\n";
            $str.=print_r($txt,true);
            //var_dump подробней, но нечитабельный, люблю print_r
            //однако он не показывает корректно bool и null, выводим их отдельно
        }elseif(is_null($txt)){
            $str.='NuLL';
        }elseif(is_bool($txt)){
            $str.=$txt ? 'TruE':'FalsE';
        }else
            $str.=$txt;
        $str.="\n";
    }
    file_put_contents($logfile,$str,FILE_APPEND);
}

Скармливаете урл на этот скрипт вашему чёрному ящику и пусть шлёт что захочет. А мы смотрим в лог-файл.

Для разных доменов в запросах можно придумать решение через файл hosts, или своим DNS-сервером.

Для разных урлов серверы позволяют сделать подмену на нужный путь к скрипту, переложив сам путь в get-параметр. У апача, например, это mod_rewrite.

А в случае, если черный ящик ходит напрямую по разным IP-адресам, то можно извратиться с iptables в цепочке OUTPUT:

iptables -t nat -A output -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1, правда жертвуя собственным интернетом. А если сильно постараться, то и не жертвуя

Если есть ASP, думаю аналогичный функционал повторить можно и там.

А если совсем ничего нет под рукой - в линуксе есть отличная утилита ncat. Включаем её на прослушивание порта и сливаем всё в файл: sudo ncat -lvkp 80 --append-output -o my.log

Для винды, увы, не подскажу.

И, конечно, если отправляющая сторона захочет слать по HTTPS, то вам по любому понадобится веб-сервер с доменом и SSL сертификатом.

Ну и совсем хардкорные решения:

  • запускаем wireshark и смотрим.
  • Настраиваем в фаерволе винды аудит с логированием трафика от вашего черного ящика.