Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
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(/.*)$/ => 1ドルcom2ドル.

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

Если в правой части правила указать протокол 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

AltStyle によって変換されたページ (->オリジナル) /