Regexp HTTP-proxy

Недавно для своих нужд написал небольшой прокси-сервер, заменяющий содержимое ответа по заданному регулярному выражению. Интерфейс реализован на основе Tk, сам сервер построен на основе модуля HTTP::Proxy, так как в нем есть довольно удобная система фильтров.
Замена может производиться как по статическим строкам, так и по полноценным регулярным выражениям. Если в регулярном выражении производится захват некоторого фрагмента, то доступ к нему в подставляемом тексте осуществляется стандартным для перла способом ($1, $2, ...).

Скачать: proxy_regex

В процессе разработки столкнулся со следующими проблемами, на которые рекомендую обратить внимание:
1. При использовании Tk вместе с методами fork или async, необходимо закрывать хендлы STDIN и STDOUT. В противном случае, Perl будет крешиться (фича или баг библиотеки encoding.dll, если не закрывать хендлы, то в ней вызывается метод, приводящий к попытке разыменования указателя на недопустимую область памяти).
2. HTTP::Proxy по-умолчанию довольно специфично работает с кодировками, поэтому стоит использовать заготовки fizbin'a с perlmonks.
3. При запуске win* используется HTTP::Proxy::Engine::NoFork, все бы хорошо, но если существует потребность производить остановку сервера по сигналу, то содержимое метода run следует слегка модифицировать. Изначально начало метода выглядит так:

Т.к. аргумента у метода can_read нет, то данный вызов является блокирующим. Соответственно, цикл из метода start (модуль HTTP::Proxy)

не сразу прекращается при получении сигнала. Поэтому я добавил аргумент в методе can_read для своевременной реакции на сигналы.
4. Ещё один неприятный момент состоит в том, что после выхода из цикла прокси не закрывает сокет. Решается добавлением строки после цикла.

Regexp HTTP-proxy: 11 комментариев

  1. хорошая шутка - только не работает
    d:\downloads\proxy>perl -v

    This is perl, v5.10.1 (*) built for MSWin32-x86-multi-thread

    Copyright 1987-2009, Larry Wall

    Perl may be copied only under the terms of either the Artistic License or the
    GNU General Public License, which may be found in the Perl 5 source kit.

    Complete documentation for Perl, including FAQ lists, should be found on
    this system using "man perl" or "perldoc perl". If you have access to the
    Internet, point your browser at http://www.perl.org/, the Perl Home Page.

    d:\downloads\proxy>ver

    Microsoft Windows [Version 6.1.7601]

    d:\downloads\proxy>perl start.pl

  2. Немного не в тему:
    Каими на твоём блоге нашёл море полезной информации и софта. А не мог бы ты выложить рабочий брут акков mail.ru ?
    Сколько искал, рабочих не нашёл

  3. Как на счет socks5 и фильтрации https (ssl)? ОЧЕНЬ нужна такая прокся как тут, но с фильтрацией securного трафика. В Charles есть расшифровка https (надо всего лишь установить сертификат и юзать socks5), но модуль rewrite не работает с https :( .

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *