@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());
    }
  • Вопрос задан
  • 132 просмотра
Решения вопроса 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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы