-
Kanaris (04.12.09 16:03) [0]Задача такова. Хочу написать программу, которая посредством TClientSocket и TServerSocket будет пропускать через себя запрос и ответ таким образом:
1) программа висит на каком-нибудь порту (например 888) в режиме сервера (принимает запросы);
2) пользователь в браузере заходит на адрес http://localhost:888/ (т.е. браузер посылает запрос в программу);
3) программа получила запрос от браузера, и отправила его на сайт (например htmlbook.ru), поменяв в запросе строчку "Host: localhost:888" на "Host: htmlbook.ru";
4) дождавшись ответа от htmlbook.ru, программа в точности передает его в браузер.
Т.е. получается, что пишешь в браузере http://localhost:888 и тебе открывается сайт htmlbook.ru. Т.е. выполняется "ретрансляция" запроса. Должно поддерживаться несколько соединений (т.к. браузер открывает сразу несколько запросов с сервером). Как это реализовать?
(прокси не предлагайте, это не совсем то) -
Медвежонок Пятачок © (04.12.09 16:38) [1]и в чем смысл?
-
Медвежонок Пятачок © (04.12.09 16:41) [2]Как это реализовать?
ты же сам все рассказал как:
программа получила запрос от браузера, и отправила его на сайт (например htmlbook.ru), поменяв в запросе строчку "Host: localhost:888" на "Host: htmlbook.ru";
4) дождавшись ответа от htmlbook.ru, программа в точности передает его в браузер. -
Anatoly Podgoretsky © (04.12.09 16:48) [3]> Kanaris (04.12.2009 16:03:00) [0]
Да типичное это прокси, только у тебя оно наверняка нелегальное -
Kanaris (04.12.09 16:57) [4]Если не сложно, пожалуйста наваяйте пару строк, как это сделать, самое главное, чтобы поддерживалось несколько соединений (именно с этим у меня ничего не получается).
-
> Kanaris (04.12.09 16:57) [4]
может подойдет после небольшой модификации http://www.delphisources.ru/pages/sources/internet/2006_year/tgphttp_proxy.html
а еще есть TIdHTTPProxy -
> Kanaris (04.12.09 16:57) [4]
вот еще
http://forum.sources.ru/index.php?showtopic=135857&view=showall -
Сергей М. © (04.12.09 21:42) [7]
> Kanaris (04.12.09 16:57) [4]
Ты студень что ли ?)
Та "пара строк" - это для препода ? -
Сергей М. © (04.12.09 21:44) [8]
> прокси не предлагайте, это не совсем то
Гупости.
Прокси - это как раз то самое и есть. -
Kanaris (05.12.09 00:05) [9]Попробовал реализовать через TIdMappedPortTCP. Здесь вообще все просто, выполняется тоже самое. Но как подменить адрес в запросе?
-
> Kanaris (05.12.09 00:05) [9]
> TIdMappedPortTCP
Это несколько для другого. Для создания HTTP proxy он не годится. -
Сергей М. © (05.12.09 00:14) [11]
> Попробовал реализовать через TIdMappedPortTCP
Только не говори что это не прокси.
> как подменить адрес в запросе?
зачем ?) -
> Kanaris
Вообще твоя задача довольно легко решается с помощью связки TidHTTPServer и TIdHTTPClient. Многопоточность TidHTTPServer обеспечит сам.
Грубо говоря все выглядит так:
1) TidHTTPServer ждет соединений на нужном порту
2) Клиент подключается к нему с запросом
3) В обработчике сервера OnCommandGet ты получаешь всю информацию о запросе клиента, в том числе заголовок запроса и т.д.
4) Динамически создаешь TIdHTTPClient, передаешь ему все что нужно и получаешь страницу
5) Отдаешь страницу клиенту.
вуаля.