@joha0738

Как правильно получить одноразовый код через URL?

Нашел бесплатный API по РЖД и решил для себя, и своего обучения написать простого телеграмм бота по поиску билетов.
Но у меня не получается правильно получить одноразовый код. Суть проста, сперва надо отправить запрос "https://pass.rzd.ru/timetable/public/ru?layer_id=5...}} "
где необходимо подставить нужные данные и получить одноразовый код RID. Его необходимо подставить в следующий запрос и получить JSON с нужной инфой.
"https://pass.rzd.ru/timetable/public/ru?layer_id=5...}}"

Вот мои код, и проблема в том, что я получаю как будто "юзаный" код и ржд выдает ошибку
{"result":"FAIL","type":"SESSION_EXPIRED","error":"Сессия истекла. Пожалуйста, попробуйте обновить страницу.","timestamp":"15.11.2021 18:51:58.103"}

public void findTickets(String from,String to,String date) {
        StringBuffer content = new StringBuffer();
        try {

            URL url = new URL("https://pass.rzd.ru/timetable/public/ru?layer_id=5827&dir=0&tfl=3&checkSeats=1&code0=" + from + "&dt0=" + date + "&code1=" + to);
            URLConnection urlConnection = url.openConnection();

            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line);
            }
            bufferedReader.close();
        } catch (Exception e){
            System.out.println("EROR "+e.getMessage());
        }

        JSONObject obj = new JSONObject(content.toString());
        long rid=0;
        rid=obj.getLong("RID");

        try {
            URL url = new URL("https://pass.rzd.ru/timetable/public/ru?layer_id=5827&rid="+rid);
            URLConnection urlConnection = url.openConnection();

            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            String line;
            while ((line=bufferedReader.readLine())!=null){
                content.append(line);
            }
            bufferedReader.close();
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
        System.out.println(content.toString());
    }
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ASMi386
Внимательно читайте документацию к API, вы забываете про Cookies
Alongside the json the RID the Server will also yield back a SET-Cookie header that has JSESSIONID Cookie. This cookie has to be added to any future requests.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы