Задача такова. Хочу написать вебсервер-анонимайзер, который при обращении к нему ретранслирует запросы (через прокси) и возвращает полученный результат: 1) программа висит на каком-нибудь порту (например 888) в режиме сервера (принимает запросы); 2) пользователь в браузере заходит на адрес http://localhost:888/ (т.е. браузер посылает запрос в программу); 3) программа получила запрос от браузера, и отправила его на сайт (например htmlbook.ru) через прокси, поменяв в запросе строчку "Host: localhost:888" на "Host: htmlbook.ru"; 4) дождавшись ответа от htmlbook.ru, программа в точности передает его браузеру. Т.е. получается, что пишешь в браузере http://localhost:888 и тебе открывается сайт htmlbook.ru, причем запрос от нашего сервера на htmlbook должен быть через прокси. Нет ли технических ограничений, чтобы реализовать такое чудо? Подскажите как организовать алгоритм, какие компоненты использовать. За пример реализации готов заплатить.
Технических ограничений на это нет — хедер Host можно легко изменить (по меньшей мере, потому что это прикладной уровень по модели OSI). Даже при использовании шифрования через HTTPS эта информация передается как plain text и тому есть причины. Но почему бы вам не реализовать/использовать прокси-сервер в общем виде (т.е. реализуя/используя протокол вроде SOCKS)?
100% аналога имхо не получится. Это был бы хороший инструмент для межсайтового скриптинга (Cross-Site Scripting). А просто контент с конкретных сайтов получать можно, это умеют делать reverse-proxy (в этом режиме умеют работать nginx, apache, haproxy). Для полноценной работы через прокладку, ее нужно указывать браузеру в качестве прокси. Или переназначать ДНС, как делают сервисы типа CloudFlare.
Решение такое: Еще лет 10 назад для учебной статьи по компонентам Delphi INDY была создана небольшая демонстрационная утилита - "Пример веб-сервера анонимайзера". В связи с утратой актуальности данного стека технологий, материал тогда так и не был написан/опубликован. А программу могу предложить сейчас: Описание: ПО WSAN является демо-версией мостового анонимайзера с поддержкой socks-прокси. Разработано на Delphi 7 с применением следующих комплектных компонентов INDY: idHTTPServer, idHTTP, IdIOHandlerSocket, IdSocksInfo, IdAntiFreeze. Позволяет обращаться к заданному сайту по локальному адресу и порту, в том числе с проксификацией внешнего трафика. Поддерживаются socks-прокси 4 и 5 версии, включая авторизацию. Благодаря применению INDY исходный код предельно лаконичен, состоит из вспомогательных процедур применения настроек интерфейса и единственной главной процедуры, организующей обмен данными между компонентами. Общая схема логики работы компонентов, их связи: Недостатки демо: Отсутствует поддержка https. Не обрабатываются редиректы (код 301, правда для целей веб-анализа это иногда и нужно). Компонент idHTTP работает в однопоточном режиме из-за чего организована очередь обращений к нему, что снижает производительность утилиты под многопользовательскую эксплуатацию. Не поддерживается смена настроек socks-прокси "на лету". Использование и загрузка: ПО может быть использовано как заготовка для более продвинутого продукта, распространяется совершенно свободно, как FreeWare. В архиве вместе с бинарной версией размещен прокомментированный исходный код проекта. Скачать программу и исходный код wsan_1.0.0.zip (220КБ).