Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Как реализовать "ретранслятор" запросов через сокеты?   Найти похожие ветки 

 
Kanaris   (2009-12-04 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. Т.е. выполняется "ретрансляция" запроса. Должно поддерживаться несколько соединений (т.к. браузер открывает сразу несколько запросов с сервером). Как это реализовать?

(прокси не предлагайте, это не совсем то)


 
Медвежонок Пятачок ©   (2009-12-04 16:38) [1]

и в чем смысл?


 
Медвежонок Пятачок ©   (2009-12-04 16:41) [2]

Как это реализовать?

ты же сам все рассказал как:

программа получила запрос от браузера, и отправила его на сайт (например htmlbook.ru), поменяв в запросе строчку "Host: localhost:888" на "Host: htmlbook.ru";
4) дождавшись ответа от htmlbook.ru, программа в точности передает его в браузер.


 
Anatoly Podgoretsky ©   (2009-12-04 16:48) [3]

> Kanaris  (04.12.2009 16:03:00)  [0]

Да типичное это прокси, только у тебя оно наверняка нелегальное


 
Kanaris   (2009-12-04 16:57) [4]

Если не сложно, пожалуйста наваяйте пару строк, как это сделать, самое главное, чтобы поддерживалось несколько соединений (именно с этим у меня ничего не получается).


 
DVM ©   (2009-12-04 18:51) [5]


> Kanaris   (04.12.09 16:57) [4]

может подойдет после небольшой модификации http://www.delphisources.ru/pages/sources/internet/2006_year/tgphttp_proxy.html

а еще есть TIdHTTPProxy


 
DVM ©   (2009-12-04 18:53) [6]


> Kanaris   (04.12.09 16:57) [4]

вот еще

http://forum.sources.ru/index.php?showtopic=135857&view=showall


 
Сергей М. ©   (2009-12-04 21:42) [7]


> Kanaris   (04.12.09 16:57) [4]


Ты студень что ли ?)
Та "пара строк" - это для препода ?


 
Сергей М. ©   (2009-12-04 21:44) [8]


> прокси не предлагайте, это не совсем то


Гупости.
Прокси - это как раз то самое и есть.


 
Kanaris   (2009-12-05 00:05) [9]

Попробовал реализовать через TIdMappedPortTCP. Здесь вообще все просто, выполняется тоже самое. Но как подменить адрес в запросе?


 
DVM ©   (2009-12-05 00:11) [10]


> Kanaris   (05.12.09 00:05) [9]


> TIdMappedPortTCP

Это несколько для другого. Для создания HTTP proxy он не годится.


 
Сергей М. ©   (2009-12-05 00:14) [11]


> Попробовал реализовать через TIdMappedPortTCP


Только не говори что это не прокси.


> как подменить адрес в запросе?


зачем ?)


 
DVM ©   (2009-12-05 00:18) [12]


> Kanaris

Вообще твоя задача довольно легко решается с помощью связки TidHTTPServer и TIdHTTPClient. Многопоточность TidHTTPServer обеспечит сам.

Грубо говоря все выглядит так:
1) TidHTTPServer ждет соединений на нужном порту
2) Клиент подключается к нему с запросом
3) В обработчике сервера OnCommandGet ты получаешь всю информацию о запросе клиента, в том числе заголовок запроса и т.д.
4) Динамически создаешь TIdHTTPClient, передаешь ему все что нужно и получаешь страницу
5) Отдаешь страницу клиенту.

вуаля.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.051 c
15-1339653614
KSergey
2012-06-14 10:00
2013.03.22
Ассемблерные вставки и переносимость кода


15-1351590930
Palladin
2012-10-30 13:55
2013.03.22
Как в директивах препроцессора с# target framework учесть?


6-1260441642
wind1
2009-12-10 13:40
2013.03.22
Как создать работающий проект с использованием Corba


15-1336894204
Юрий
2012-05-13 11:30
2013.03.22
С днем рождения ! 13 мая 2012 воскресенье


15-1329643520
AV
2012-02-19 13:25
2013.03.22
Посоветуйте что-нибудь, компонент не хочет работать в службе..