Главная страница
    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.071 c
2-1328882938
Сергей
2012-02-10 18:08
2013.03.22
SimpleDataSet как обновить данные?


15-1353184202
Юрий
2012-11-18 00:30
2013.03.22
С днем рождения ! 18 ноября 2012 воскресенье


15-1324935817
Германн
2011-12-27 01:43
2013.03.22
eBook


2-1330345563
n-neo
2012-02-27 16:26
2013.03.22
Большой массив


15-1337849446
Дмитрий С
2012-05-24 12:50
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский