log-proxy/README.md
2026-01-23 10:03:52 +07:00

3.4 KiB
Raw Permalink Blame History

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

Формат логов

Прокси выводит два формата логов:

  1. Человекочитаемый формат - красивый вывод в консоль с разделителями
  2. 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 в запросах автоматически форматируется для лучшей читаемости
  • Все оригинальные заголовки сохраняются и передаются на целевой сервер