Как я могу написать кеширующий HTTP прокси в Perl? - PullRequest
4 голосов
/ 04 апреля 2009

Я намереваюсь написать простой HTTP-прокси в Perl, используя модуль HTTP :: Proxy . Я разбираюсь с самой основной задачей о том, как создать прокси и основные фильтры и все такое. Но что я не могу понять, так это как вручную принудительно обслуживать файл через кеш.

В основном, сценарий таков, что я запускаю этот прокси на компьютере A. Пользователь на компьютере B получает доступ в Интернет, используя этот прокси. Теперь этот прокси будет действовать как проход для всех запросов B, пока он не запросит конкретный URL (файл, скажем, http://abc.com/file.zip)., мне нужно перехватить этот запрос, и вместо того, чтобы позволить ему загрузить фактический файл .zip, дайте ему уже загруженный файл, который я вручную хранил на компьютере A.

Также обратите внимание, что на компьютере А может не работать веб-сервер, поэтому я не могу просто перенаправить URL-адрес, мне нужно обслуживать его из кэша.

Любые указатели для этого будут оценены. Спасибо

Редактировать: Дополнительная информация. Я начал использовать HTTP :: Daemon и LWP :: UserAgent в комбинации вместо HTTP :: Proxy До сих пор я успешно перехватываю все запросы, а затем ищу в заголовках URL-адрес. Если конкретного имени файла нет, я просто передаю запрос фактическому получателю, используя LWP: UserAgent (simple_request), и возвращаю ответ исходному отправителю, используя send_response. Если я найду имя файла, я больше не буду пересылать запрос, вместо этого я пытаюсь обработать мой конкретный файл, используя метод «send_file_response». Проблема в том, что все остальные запросы работают нормально, и комп B может просматривать Интернет, но когда он пытается загрузить этот файл, он просто продолжает ждать ответа. Что касается использования squid, я не могу установить squid на эти машины.

Ответы [ 2 ]

3 голосов
/ 05 апреля 2009

Не лучше ли просто использовать Кальмар для чего-то подобного?

1 голос
/ 04 апреля 2009

Я думаю, что на расстоянии мы можем только догадываться, пока send_file_response не работает. Я бы порекомендовал

  • прочитать и понять документацию для модулей и методов, которые вы используете

  • протоколировать действие каким-либо образом на прокси-сервере (начало, конец)

  • отслеживание связи между клиентом B и прокси-сервером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...