•  

ГлавнаяIndyЧастые вопросы по Indy → Каким образом в DELPHI перехватить запрос веб страницы

Создано: 16.05.2014 21:47:20 · Исправлено: 16.05.2014 21:47:43 · Прочтений: 1332

Каким образом в DELPHI перехватить запрос веб страницы, хочется сделать, что-то вроде прокси-помощника. Есть сервак халявный с безлимиткой. На него ставим сервер, который глотает запрошенные веб-страницы, сжимает и посылает. А я чтобы мог из любого браузера получать уже разжатую инфу. Не очень четко сформулировал, но надеюсь на ценный совет.
Нужно 2 программы. 1. Программа A. Прокси сервер, открывающий порт и ждущий http запрос. Ставите на свой компьютер. Браузер настраиваете на работу через этот прокси и указываете локальный адрес и порт. Ваш Прокси Получет запрос, отправляет его по своему протоколу программе Б , которая стоит на сервак халявный с безлимиткой. 2. Программа Б, стоящая на сервере, получает этот запрос и лезит в инет. Получает страничку, сжимает её и передаёт обратно программе A по своему протоколу. Программа А распаковывает страничку и отдаёт ждущему браузеру. Однако я не очень понимаю такую ситуацию. Ваш провайдер считает трафик между вашими сервером и компьютером? И к стати не забывайте, что сейчас большенство HTTP трафика и так сжимается. А то, что не сжимается (png, jpg) и так сжато до предела. Большой выгоды не получите, а в скорости потеряете.
Приблизительно так систему эту я себе и представлял. А кто-нибудь сможет мне подсказать - Как написать проксик. Не умею... Может кой-нить сурс подскажете, либо основные компоненты и операции?...
Прокси сервер - программа которая откроет сокет и будет ждать соединения (по http протоколу в данном случае). Получив запрос браузера она должна изменить http-заголовок, создать ещё сокет и приконектиться к адресу указанному в этом заголовке. Получить ответ и передать его назад браузеру. Для создания непосредственно приложения можете использовать стандартные компоненты (Tserversocket/Tclientsocket,indy и т.д), можете использовать api (библиотека Winsock2). По моему в indy даже были полу-готовые решения для подобных задач. Но если хотите получше понять как всё оно работает то лучше конечно winsock. В этом случае вам ещё нужно будет изучить как работает многопоточность (Tthread). Прочитать про сокеты можно тут http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1021 Прочитать про http протокол вы можете например тут http://tools.ietf.org/html/rfc2616 Начните с простого. Создайте например сервер на Tserversocket, который будет выводить в memo всю полученую на сокет информацию. В браузере установите соединение через прокси и укажите локальный адрес и порт этого сервера. И попробуйте зайти на любой сайт. Запрос браузера отобразится в мемо. Попробуйте просто подсоединиться к вашей программе (http://127.0.0.1:[ваш порт]). Потом попробуйте ответить браузеру корректным Http заголовком и своим html кодом. Потом попробуйте стянуть страничку из интернета (адрес стяните из зоголвка браузера) и передавать её браузеру. И так далее. Это не сложно. Фух. А вот писать столько - сложно. Тем более что в интернете информации уйма.