3.4 KiB
3.4 KiB
Log Proxy - Логирующий реверс-прокси для реверс-инжиниринга API
Простой HTTP реверс-прокси на Go, который логирует все входящие запросы и исходящие ответы для анализа API.
Возможности
- ✅ Перехват и логирование всех HTTP запросов (метод, URL, заголовки, тело)
- ✅ Перехват и логирование всех HTTP ответов (статус, заголовки, тело)
- ✅ Автоматическое форматирование JSON в логах
- ✅ Вывод времени выполнения запросов
- ✅ Красивый консольный вывод и JSON формат
- ✅ Сохранение оригинальных заголовков и путей
Установка
go mod download
Использование
Способ 1: Через аргументы командной строки
go run main.go http://api.example.com
Способ 2: Через переменные окружения
export TARGET_URL=http://api.example.com
export PORT=8080 # опционально, по умолчанию 8080
go run main.go
Способ 3: Сборка и запуск
go build -o log-proxy
./log-proxy http://api.example.com
Примеры
Базовое использование
# Запуск прокси на порту 8080, перенаправление на api.example.com
go run main.go http://api.example.com
# В другом терминале отправляем запрос через прокси
curl http://localhost:8080/api/users
С кастомным портом
PORT=3000 go run main.go http://api.example.com
Логирование в файл
go run main.go http://api.example.com 2>&1 | tee api-logs.txt
Формат логов
Прокси выводит два формата логов:
- Человекочитаемый формат - красивый вывод в консоль с разделителями
- JSON формат - структурированные данные для дальнейшей обработки
Каждая запись содержит:
- Временную метку
- Метод и URL запроса
- Заголовки запроса и ответа
- Тело запроса и ответа
- Время выполнения запроса
Пример вывода
================================================================================
[2024-01-15 10:30:45] GET /api/users
Remote: 127.0.0.1:52341
Request Headers:
User-Agent: curl/7.68.0
Accept: */*
[2024-01-15 10:30:45] Response: 200 (45ms)
Response Headers:
Content-Type: application/json
Content-Length: 1234
Response Body:
{
"users": [...]
}
================================================================================
Примечания
- Длинные тела ответов (>2000 символов) обрезаются для читаемости в консольном выводе
- JSON в запросах автоматически форматируется для лучшей читаемости
- Все оригинальные заголовки сохраняются и передаются на целевой сервер