Конференция "Сети" » Как реализовать "ретранслятор" запросов через сокеты?
 
  • 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]
    Если не сложно, пожалуйста наваяйте пару строк, как это сделать, самое главное, чтобы поддерживалось несколько соединений (именно с этим у меня ничего не получается).
  • DVM © (04.12.09 18:51) [5]

    > Kanaris   (04.12.09 16:57) [4]

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

    а еще есть TIdHTTPProxy
  • DVM © (04.12.09 18:53) [6]

    > 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. Здесь вообще все просто, выполняется тоже самое. Но как подменить адрес в запросе?
  • DVM © (05.12.09 00:11) [10]

    > Kanaris   (05.12.09 00:05) [9]


    > TIdMappedPortTCP

    Это несколько для другого. Для создания HTTP proxy он не годится.
  • Сергей М. © (05.12.09 00:14) [11]

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


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


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


    зачем ?)
  • DVM © (05.12.09 00:18) [12]

    > Kanaris

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

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

    вуаля.
 
Конференция "Сети" » Как реализовать "ретранслятор" запросов через сокеты?
Есть новые Нет новых   [134438   +31][b:0][p:0]