Skip to content
forked from HostSuki/Yaxy

Proxy-сервер для веб-разработчика.

Notifications You must be signed in to change notification settings

defaultusers/Yaxy

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yaxy

Yaxy -- это proxy-сервер для веб-разработчика, подменяющий запрашиваемые ресурсы, следуя простым правилам.

Установка

Если у вас до сих пор не установлен NodeJS, устанавливайте, после чего

npm install -g yaxy

Запуск

yaxy --config my-yaxy-config.txt --port 9999

Если не указан параметр --config, то ищется файл yaxy-config.txt в текущей директории. Если не указан --port, то сервер будет слушать порт 8558.

Формат конфигурационного файла

Конфигурационный файл читается построчно. Пустые строки, строки, начинающиеся на символ # и строки неопознанного формата игнорируются.

Правила могут объединяться в секции. Начало секции задаётся строкой в квадратных скобках, содержимое строки может быть любым.

# Правила вне секций

[Секция 1]
# Правила секции 1

[Секция 2]
# Правила секции 2

Если имя секции начинается на #, то все правила в секции игнорируются.

# Правила вне секций

[#Секция 1]
# Правила секции 1
# Будут игнорироваться

[Секция 2]
# Правила секции 2

Правила

Правила записываются в виде:

url => replacement

url -- строка, на которую должен начинаться адрес, чтобы правило сработало. http:// в начале указывать необязательно. Например, правило www.yandex.ru => ... будет срабатывать для всех ресурсов в домене www.yandex.ru, а правило yandex.ru/yandsearch => ... -- только для поиска Яндекса.

Иногда требуется точное совпадение с адресом, например, необходимо модифицировать только главную страницу какого-нибудь сайта, а внутренние оставить без изменений. В таких случаях в начале урла нужно указать !, http:// в начале указывать по прежнему необязательно, а вот завершающие слеши обязательны, т.к. совпадение должно быть точным. Например, подмена только главной страницы Яндекса: !www.yandex.ru/ => ....

Если не хватает первых двух вариантов, в левой части правила можно указать регулярное выражение, заключённое между символами /. Вдруг вам понадобится модифицировать все запросы к доменам в зоне ru: /^http://[^/]+\.ru// => .... Обратите внимание, на вход регулярному выражению подаётся весь урл, включая http://.

Простая замена урлов

Если в левой части правила находится строка, то правая часть указывает, на что в урле заменить совпавшую левую. Например, правило google.ru => yandex.ru заменит все запросы к google.ru на запросы к yandex.ru, т.е. запрос http://google.ru/ на самом деле уйдёт к http://yandex.ru/, а запрос http://google.ru/foo/bar уйдёт к http://yandex.ru/foo/bar. Более точное правило google.ru/foo => yandex.ru/foo заменит запрос к http://google.ru/foo/bar, но оставит без изменений запрос http://google.ru/baz. Обратите внимание, если необходимо сохранить путь внутри домена без изменений, то нужно указывать этот путь в обеих частях правила, т.к. google.ru/foo => yandex.ru заменит http://google.ru/foo/bar на http://yandex.ru/bar.

Если в левой части правила находится регулярное выражение, то правая часть представляет собой шаблон, в который можно вставлять сохранённые группировки регекспа. Например, заменяем все запросы к доменам *.ru на *.com: /^(http://[^/]+\.)ru(/.*)$/ => $1com$2.

Показываем локальные файлы

Если в правой части правила указать протокол file://, у нас получится маленький static-сервер.

# windows
host.com/some/path => file://c:/www/host.com
# linux
host.com/some/path => file:///home/www/host.com

index-файл для директорий -- index.html. Для приведённого примера по урлу http://host.com/some/path прилетит файл /home/www/host.com/index.html, по урлу http://host.com/some/path/empty.gif прилетит файл /home/www/host.com/empty.gif.

Используем data:uri

Если замена настолько простая, что даже файл создавать неохота, можно использовать data:uri.

host.com/some/path => data:text/html;<script type="text/javascript">alert('Привет!');</script>

В этом случае на все урлы, начинающиеся на host.com/some/path будет ответ <script type="text/javascript">alert('Привет!');</script>.

host.com/some/path/png => data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC

На урлы, начинающиеся на host.com/some/path/png отвечаем картинкой.

Если в левой части правила находится регулярное выражение, то сохранённые группировки можно вставлять в правую часть

/^http://test.my/\?name=(.*)/ => data:text/html;<script>alert('Привет, $1!');</script>

Не меняем урл

Если с урлом ничего делать не надо, то в правой части правила пишем $.

host.com/some/path => $

Это бывает необходимо, если какой-нибудь запрос изменять не надо, но нужно применить к нему модификаторы, о которых ниже.

Обрываем запрос

Если правую часть правила оставить пустой, то запрос просто оборвётся, не вернув даже http-заголовков.

Модификаторы

Строки, начинающиеся на $ (не считая пробелов в начале строки) являются модификаторами. До первого пробела идёт название модификатора, после -- аргументы. Модификатор относится к тому правилу, после которого он записан. Если модификатор записан в начале файла, до всех правил, то он применяется ко всем правилам. Если модификатор записан в начале секции, то он применяется ко всем правилам в этой секции.

Обратите внимание, модификаторы в начале файла влияют именно на все правила, т.е. на запросы, попадающие под эти правила, а не на абсолютно все запросы, проходящие через прокси-сервер.

Меняем GET-параметры

# Добавляем или изменяем параметр
$SetQueryParam from=yaxy

# Удаляем параметр
$RemoveQueryParam from

Меняем cookie

Cookie меняются для сервера, т.е. браузер посылает одни куки, а сервер получает другие.

# Добавляем или изменяем куку
$SetCookie user=YaxyUser

# Удаляем куку
$RemoveCookie ssid

Меняем HTTP-заголовки

# Устанавливаем заголовок запроса
$SetRequestHeader X-Requested-With: Yaxy

# Устанавливаем заголовок ответа
$SetResponseHeader X-Proxy: Yaxy

# Удаляем заголовок запроса
$RemoveRequestHeader Referer

# Удаляем заголовок ответа
$RemoveResponseHeader Content-Type

Меняем статус ответа

# Всегда отвечаем статусом 200, даже если что-то сломалось
$StatusCode 200

Задержка ответа

#Отвечаем не раньше, чем через 5 секунд
$Delay 5

About

Proxy-сервер для веб-разработчика.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published