Железнодорожные гонки на GET-параметрах
Второй год подряд сталкиваюсь с проблемой покупки билетов на поезд компании Гранд Сервис Экспресс. До этого много лет покупал билеты онлайн на сайте РЖД, и тут задача была в целом простой — заранее забиваешь паспортные данные пассажиров в личный кабинет, заранее смотришь поезда и прикидываешь места-вагоны, высчитываешь 45 дней до отправления (или 90, в зависимости от поезда), и ровно в 8 утра щемишься на сайт. Быстро накликал, быстро забронил, оплатил — готово.
Но некоторые поезда сайт РЖД сам не продает, и для части из них отправляет на сайт перевозчика Гранд Сервис Экспресс. Тут начинается факингщит: в моменты начала продаж сайт у чуваков дико тормозит, после каждого клика крутя анимацию по несколько минут. Нашел поезд — жди, открылось и кликнул в место — жди, открылось окно бронирования — вбивай пассажиров (тут конечно стоит вбить всё заранее).

И вот между вторым и третьим этапом прилетает обломинго — пока ты смотрел на анимацию, оказалось что выбранное место уже выкупили! Возвращаешься назад, херак — а его (как и половины других билетов) уже нет, повторяешь упражнение заново. В итоге за две-три таких итерации с ожиданиями по 5 минут, ты оказываешься в 8:15, без билетов, и с — сюрприз — почти распроданным поездом. Это не преувеличение, натурально невыкупленными остаются только верхние плацкарты и немножко разных купе.

И это ещё если вы догадаетесь пойти через сайт ржд, который форвардит напрямую в поезд нужной даты — потому что на сайте перевозчика поезд на дату надо найти, а для этого — ждать 5 минут пока прогрузится форма выбора даты. Минус 5 минут, шансы урвать удобные билеты падают на треть.
К счастью, в этот раз я подошел к проблеме по-программистски, заранее обратив внимание на структуру запросов. Поэтому вместо кликания и ожидания я заранее залогинился на сайт и после понаоткрывал в соседних окнах один и тот же запрос на поезд, уничтожив 0-й этап и распараллелив первый.
А вообще структура запроса такова, что можно конструировать прямые запросы на конкретные места конкретных поездов на конкретные даты — думаю, именно это кто-то уже сделал и просто шарашит в тысячу потоков бронь всех возможных мест напрямую со старта продаж, создавая нагрузку и лишая кожаных возможности обойти алгоритмы.

Через час после начала продаж самых популярных мест не остаётся вообще, и это в целом ожидаемо. Но то что здесь можно пролететь, прийдя к открытию, бесит неимоверно. А как места на такие поезда покупают себе условные оффлайн-пенсионеры вообще непонятно.

Всем конкуренция, посоны!