visavi / rzd-api

Api сайта rzd.ru
82 stars 16 forks source link

Forbidden #16

Open uristA opened 2 years ago

uristA commented 2 years ago

Даже в новой версии при попытке обратится к https://pass.rzd.ru/timetable/public......... выдает forbidden. rzd-api v3 php 8.1

1Bitcoin commented 2 years ago

такая же проблема, пару раз из браузера подрубался, а через прогу 403 ошибка, а теперь вообще timeout @visavi

visavi commented 2 years ago

Они там что-то замутили с защитой, подозрительные и неверные запросы сразу же банятся по IP (или еще как-то) Используйте прокси, подменяйте Referer итд это все есть в примерах

Проверил все api только что, все работает нормально

1Bitcoin commented 2 years ago

Они там что-то замутили с защитой, подозрительные и неверные запросы сразу же банятся по IP (или еще как-то) Используйте прокси, подменяйте Referer итд это все есть в примерах

Проверил все api только что, все работает нормально

а проверяли с установкой rid или session? у меня именно 403 выдавало

visavi commented 2 years ago

Не понял вопрос Я проверял данное api В директории example есть уже готовые примеры, можно там потыкать, все работает

visavi commented 2 years ago

Даже в новой версии при попытке обратится к https://pass.rzd.ru/timetable/public......... выдает forbidden. rzd-api v3 php 8.1

Не совсем понял, вы напрямую обращаетесь по этому адресу или как? Вот пример как получать данные, самый простой пример

$params = [
    'dir'        => 0, 
    'tfl'        => 3,
    'checkSeats' => 1,
    'code0'      => '2004000',
    'code1'      => '2000000',
    'dt0'        => '15.06.2022', //  тут подставляете актуальную дату
];

$api = new Rzd\Api();

var_dump($api->trainRoutes($params));
pmshik commented 1 year ago

Поиск станций и поездов работают без вопросов, как описано. Но метод получения списка вагонов чем-то отличается от них. Rid выдает, но при попытке вытащить данные либо сообщение об ошибке сервера с 200 статусом, либо 403. Пока дебажил примеры, чтоб понять что там с хедерами в запросах - меня сервак ржд заблочил)

track2 commented 7 months ago

То же самое, подтверждаю. Без проблем находит список станций, поезда. Но совершенно аналогичным способом не позволяет получить ни список вагонов, ни билеты. По полученному RID возвращает ошибку {"result":"FAIL","type":"SESSION_EXPIRED","error":"Сессия истекла. Пожалуйста, попробуйте обновить страницу.","timestamp":"<дата_время>"} Пробовал различные верианты Referer, пробовал добавлять задержки перед фетчингом данных, пробовал даже стучаться на разные API эндпоинты - всё мимо. Есть живой способ получения свободных мест "от станции до станции" в конкретно выбранном поезде?

UPD: кажется реализовал через API нового сайта, советую смотреть в эту сторону. По крайне мере пока не банит))

all4time commented 6 months ago

@track2

UPD: кажется реализовал через API нового сайта, советую смотреть в эту сторону. По крайне мере пока не банит))

Вы имеете ввиду rzd-api 4.0.1, упоминая API нового сайта?

track2 commented 6 months ago

Вы имеете ввиду rzd-api 4.0.1, упоминая API нового сайта?

Нет, я имею в виду запросы к новому API РЖД (ticket.rzd.ru): /apib2b/p/Railway/V1/Search/TrainPricing /apib2b/p/Railway/V1/Search/TrainRoute и т.д. Перед данными запросами на всякий случай генерирую валидный Referer вида: Referer: https://ticket.rzd.ru/searchresults/v/1///< date> где node_0 и node_1 это станции отправления и прибытия (можно извлечь из GET запроса к ticket.rzd.ru/api/v1/suggests с соответствующими параметрами), date - дата поездки.

Меня не банит по крайней мере, но у меня нагрузка такая... Никакая :) Для собственных нужд небольшая консольная утилита.

wellmorq commented 5 months ago

Подтверждаю проблему. Возникает не везде и не всегда, лишь на некоторых поездах будто бы. Видимо поэтому @visavi не поймал проблему. Тоже думаю на старый эндпоинт..