Proxy-сервер на Go (с использованием готовой библиотеки)

Василий7 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
21.11.2018

Требуется написать MITM-прокси на Go с использованием библиотеки https://github.com/elazarl/goproxy

Требования: 

- Сервер должен уметь работать с HTTP и HTTPS запросами 

- Все запросы проксируются на вышестоящие прокси 

- Для HTTPS сервер должен использовать свой ключ подписи запросов (Man in the middle) и внутренности всех запросов 

- Сервер должен вытаскивать из запроса все заголовки начинающиеся на "fc-" 

- В fc-заголовках указано название родительского прокси. Соответствия название – конфиг (детали ниже) хранится прямо в коде сервера 

- В fc-заголовках указан id сессии, если эта сессия недавно встречалась – используем тот же ip,порт родительского сервиса 

- Есть блэклист – спискок вхождений в URL запроса, на которые мы всегда просто отвечаем одним и тем же ответом с ошибкой (не проксируем выше) 

- Часть ответов (в зависимости от content-type ответа) должна складываться в кеш (в памяти, рекомендуется использовать библиотеку вроде github.com/bluele/gcache ) и отдаваться оттуда для следующих запросов 

- В консоль выводится статус ответа, время, название родительского сервера и url 

- В случае неудачного ответа родительского прокси, повторяем запрос 

Конфиг родительского прокси: 

- Название (ключ) 

- Набор ip-порт (может быть много, выбирается для запроса рандомно)  

- Авторизация если требуется 

В примерах goproxy есть примеры почти для всех используемых кейсов.