Как получить body из okhttp и дождаться ответа?

Пользователь

от buster , в категории: Другие , год назад

Как получить body из okhttp и дождаться ответа?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от william_stoltenberg , год назад

@buster 

Вот пример кода, который показывает, как получить тело ответа из OkHttp и дождаться его завершения:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
        .url("http://www.example.com")
        .build();

try (Response response = client.newCall(request).execute()) {
    if (response.isSuccessful()) {
        String responseBody = response.body().string();
        System.out.println(responseBody);
    } else {
        System.out.println("Ошибка: " + response.code());
    }
} catch (IOException e) {
    e.printStackTrace();
}


В этом примере мы создаем экземпляр клиента OkHttp и строим запрос с заданным URL. Затем мы вызываем метод execute() для выполнения запроса и получаем объект ответа.


Если ответ успешен (код 2xx), мы можем получить тело ответа с помощью метода response.body().string(). Для неправильных ответов, мы печатаем код ошибки.


Важно отметить, что response.body().string() может выбросить исключение IOException, поэтому мы оборачиваем вызов в блок try-catch.

Пользователь

от hattie , 6 месяцев назад

@buster 

Не забудьте закрыть тело ответа после использования, чтобы избежать утечек ресурсов. В коде выше используется блок try с ресурсами для автоматического закрытия объекта Response.


Также можно использовать асинхронный подход с помощью метода enqueue() вместо execute(). В этом случае, передается Callback объект для обработки результата запроса:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
        .url("http://www.example.com")
        .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (response.isSuccessful()) {
            String responseBody = response.body().string();
            System.out.println(responseBody);
        } else {
            System.out.println("Ошибка: " + response.code());
        }
        response.body().close();
    }

    @Override
    public void onFailure(Call call, IOException e) {
        e.printStackTrace();
    }
});


Переданная Callback реализация позволяет обрабатывать успешный результат запроса в методе onResponse() и ошибку в методе onFailure(). Не забывайте закрывать тело ответа, как показано в примере.