Yaxy — proxy-сервер, подменяющий различные части HTTP-запросов и ответов на указанные в config-файле значения. Я не буду здесь описывать, как поставить, настроить и запустить сервер, это всё описано в readme репозитория. Здесь я опишу различные случаи, в которых Yaxy очень помогает, а то и вовсе незаменим.
В простейшем случае у нас будут правила
В результате получим функциональность файла hosts с дополнительными плюшками:
Кстати, если сайт находится на нестандартном порту, необязательно писать этот порт в адресной строке браузера, можно указать его в конфиге.
А мне позарез нужна поддержка HTTP-заголовока
Теперь на моём компьютере скрипты любого сайта смогут читать www.yandex.ru.
У себя на сайте вы за данными ходите аяксом. Вдруг выясняется, что на определённых данных ваш скрипт падает, но воспроизвести именно такие данные штатными средствами системы не так-то просто. Да, честно говоря, и непонятно пока, какой именно должен быть JSON, чтобы всё сломалось. Можно попробовать пропатчить сервер, чтобы он на определённый урл выдавал константный JSON, а можно в конфиге прокси-сервера написать
В JS-коде обнаружена ошибка, которая воспроизводится только в продакшне.
Теперь весь сайт грузится с продакшна, а единственный скрипт main.js — с локального сайта.
Вы пишете счётчик посещаемости, или кнопки социальных сетей, или рекламную систему, или что-то ещё, что работает на чужих сайтах. Вам обязательно встретится сайт, на котором ваш код работать не будет. При этом на сайте десяток своих скриптов и ещё десяток различных информеров, и с чем конфликтует ваш скрипт — непонятно.
Что ж, сохраняем исходный код какой-нибудь страницы сайта, а в конфиг Yaxy пишем
Для браузера ничего не поменялось, а вы теперь сможете исправить код страницы по своему усмотрению. А дальше стандартно — удаляем в файле различные строки и смотрим, после удаления которой пропадёт ошибка. Обнаружили, что ошибка появляется при подключении файла script.js? Подменяем его таким же образом и смотрим, что именно в нём плохого. После этого по желанию — или пишете владельцу, что код у него в таком-то месте, мягко говоря, так себе, или (что предпочтительней) адаптируете свой скрипт к подобным ситуациям.
Вам нужно быстренько сделать двухстраничный сайтик, чтобы проверить свою гипотезу, а возиться с Апачем неохота.
Теперь в папке c:/www/my-site лежат файлы сайта, открывающиеся в браузере по адресу new-site.my.
Распространённая проблема: на локалхосте всё работает быстро, кажется, что индикация загрузки не нужна. Но даже если есть понимание, что какая-то крутящаяся картинка нужна, мы её всё равно не успеваем увидеть.
Теперь файл data.json будет грузиться не менее 5 секунд.
Вам для тестов нужно открыть какой-то сайт в iframe, но сайт посылает заголовок
Нет больше мешающего заголовка.
К вам обратился странный человек: он хочет, чтобы вы написали JS-скрипт для сайта, но доступ к сайту давать не хочет. А сайт достаточно сложен, скрипт нужно тестировать обязательно на нём. Нет никаких проблем. Выбираем на нужной странице сайта какой-нибудь подключенный JS-файл (например, /js/main.js), сохраняем его к себе (например в /home/me/main.js), добавляем в Yaxy правило
Теперь весь сайт будет работать в обычном режиме, а файл main.js будет грузиться локально. Дописываем новый код в конец файла, потом можно будет вынести его отдельно.
А что если нужно менять вёрстку? Тоже никаких проблем. Сохраняем исходник главной страницы, добавляем правило
Теперь вся главная страница сайта лежит у вас на диске, можно менять вёрстку по желанию.
Это далеко не полный перечень ситуаций, в которых меня выручает Yaxy. Буду рад, если он и вам пригодится. Ну и конечно приветствуются багрепорты.
Замена файлу hosts
В простейшем случае у нас будут правила
site.my => 127.0.0.1
В результате получим функциональность файла hosts с дополнительными плюшками:
- Файл hosts кэшируется, иногда приходится несколько раз нажимать Ctrl+F5, чтобы увидеть изменения. Правила из конфига Yaxy применяются сразу после сохранения.
- Локальность. Файл hosts влияет на всю систему, через проксю же ходят только нужные вам браузеры. Хотя в некоторых случаях это может быть недостатком.
- А у вас есть виртуальные машины с различными браузерами в них? В каждой виртуальной машине приходится поддерживать файл hosts. А можно просто прописать всем браузерам один прокси-сервер.
- Вы проверяете свои сайты в iPhone/iPad? Хорошо, если есть девелоперский сервер, а если нет — приходится олаживаться в продакшне. С Yaxy мы указываем в настройках прокси-сервер на нашем локальном компьютере и смотрим с телефона все локальные сайты.
Кстати, если сайт находится на нестандартном порту, необязательно писать этот порт в адресной строке браузера, можно указать его в конфиге.
site.my => localhost:9898
Серверные ребята так долго всё делают
А мне позарез нужна поддержка HTTP-заголовока
Origin
на сайте, чтобы отладить свои скрипты. Не надо никого ждать. www.yandex.ru => $
$SetResponseHeader Access-Control-Allow-Origin: *
Теперь на моём компьютере скрипты любого сайта смогут читать www.yandex.ru.
Тестируемся на нужных данных
У себя на сайте вы за данными ходите аяксом. Вдруг выясняется, что на определённых данных ваш скрипт падает, но воспроизвести именно такие данные штатными средствами системы не так-то просто. Да, честно говоря, и непонятно пока, какой именно должен быть JSON, чтобы всё сломалось. Можно попробовать пропатчить сервер, чтобы он на определённый урл выдавал константный JSON, а можно в конфиге прокси-сервера написать
my-service.my/my-data.json => data:application/json;{"success":false,"error":"Большущая ошибка"}
Отлаживаем в продакшне
В JS-коде обнаружена ошибка, которая воспроизводится только в продакшне.
my-service.ru/scripts/main.js => my-service.dev/scripts/main.js
Теперь весь сайт грузится с продакшна, а единственный скрипт main.js — с локального сайта.
Отлаживаемся на чужом сайте
Вы пишете счётчик посещаемости, или кнопки социальных сетей, или рекламную систему, или что-то ещё, что работает на чужих сайтах. Вам обязательно встретится сайт, на котором ваш код работать не будет. При этом на сайте десяток своих скриптов и ещё десяток различных информеров, и с чем конфликтует ваш скрипт — непонятно.
Что ж, сохраняем исходный код какой-нибудь страницы сайта, а в конфиг Yaxy пишем
bad-site.ru/page.html => file:///home/me/bad-site.html
Для браузера ничего не поменялось, а вы теперь сможете исправить код страницы по своему усмотрению. А дальше стандартно — удаляем в файле различные строки и смотрим, после удаления которой пропадёт ошибка. Обнаружили, что ошибка появляется при подключении файла script.js? Подменяем его таким же образом и смотрим, что именно в нём плохого. После этого по желанию — или пишете владельцу, что код у него в таком-то месте, мягко говоря, так себе, или (что предпочтительней) адаптируете свой скрипт к подобным ситуациям.
Сайт за 30 секунд
Вам нужно быстренько сделать двухстраничный сайтик, чтобы проверить свою гипотезу, а возиться с Апачем неохота.
new-site.my => file://c:/www/my-site
Теперь в папке c:/www/my-site лежат файлы сайта, открывающиеся в браузере по адресу new-site.my.
Тестируем аяксовую загрузку данных
Распространённая проблема: на локалхосте всё работает быстро, кажется, что индикация загрузки не нужна. Но даже если есть понимание, что какая-то крутящаяся картинка нужна, мы её всё равно не успеваем увидеть.
my-site.ru/data/data.json => $
$Delay 5
Теперь файл data.json будет грузиться не менее 5 секунд.
Убираем мешающие HTTP-заголовки
Вам для тестов нужно открыть какой-то сайт в iframe, но сайт посылает заголовок
X-Frame-Options: DENY
. Добавляем правило site.ru => $
$RemoveResponseHeader X-Frame-Options
Нет больше мешающего заголовка.
Заказ на доработку скриптов сайта
К вам обратился странный человек: он хочет, чтобы вы написали JS-скрипт для сайта, но доступ к сайту давать не хочет. А сайт достаточно сложен, скрипт нужно тестировать обязательно на нём. Нет никаких проблем. Выбираем на нужной странице сайта какой-нибудь подключенный JS-файл (например, /js/main.js), сохраняем его к себе (например в /home/me/main.js), добавляем в Yaxy правило
site.ru/js/main.js => file:///home/me/main.js
Теперь весь сайт будет работать в обычном режиме, а файл main.js будет грузиться локально. Дописываем новый код в конец файла, потом можно будет вынести его отдельно.
А что если нужно менять вёрстку? Тоже никаких проблем. Сохраняем исходник главной страницы, добавляем правило
!site.ru/ => file:///home/me/site.ru.html
Теперь вся главная страница сайта лежит у вас на диске, можно менять вёрстку по желанию.
Это далеко не полный перечень ситуаций, в которых меня выручает Yaxy. Буду рад, если он и вам пригодится. Ну и конечно приветствуются багрепорты.