Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.066 c
8-1225970127
Voffka
2008-11-06 14:15
2013.03.22
Кнопки управления окном


2-1328101281
sergeii01
2012-02-01 17:01
2013.03.22
Запись в файл из нескольких потоков


15-1350725654
Anrey
2012-10-20 13:34
2013.03.22
Трассировка+замер скорости+отправка отчета


15-1329926834
Unknown user
2012-02-22 20:07
2013.03.22
Balloon hint


2-1347623853
Ботаник
2012-09-14 15:57
2013.03.22
Приложение замораживается





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский