Файлы cookie с использованием OkHttp

Я работаю над клиентом на Java, который отправляет запросы на сервер. Прямо сейчас, чтобы пользователь вошел в систему, мне нужно установить файлы cookie так же, как это делают почтальоны или браузеры, то есть, если сервер устанавливает файл cookie, клиент должен использовать его в будущих запросах, направленных на этот URL-адрес. В настоящее время у меня есть http-клиент, реализованный с использованием OkHttp, но если бы был лучший способ сделать это, я бы не возражал против изменения библиотеки. Я искал и видел, что CookieJar может быть решением моей проблемы, но я не нашел конкретного примера для подражания.

Вкратце: как мне добавить файлы cookie в этот метод в этот интерфейс для достижения цели?

Большое спасибо!

public static String sendPost(Map<String,Object> messageToSend, String url) throws Exception {
    // Set requestBody as individual formatted to json
    String jsonRequest  = new Gson().toJson(messageToSend);
    RequestBody body    = RequestBody.create(jsonRequest,MediaType.parse("application/json; charset=utf-8"));

    //  Set request parameters
    Request request = new Request.Builder()
            .url("http://" + ADDR + ":" + PORT + url)
            .addHeader("User-Agent", "OkHttp Bot")
            .post(body)
            .build();

    //  Send request and get response body
    Response response = HTTP_CLIENT.newCall(request).execute();
    if (response.isSuccessful()) {
        ResponseBody responseBody = response.body();
        if (responseBody != null)
            return responseBody.string();
    }
    return null;
}

П.Д.: Сервер корректно устанавливает куки, как в браузерах, так и в Postman это работает как шарм.


person atp    schedule 06.03.2020    source источник
comment
Отвечает ли это на ваш вопрос? Автоматическая обработка файлов cookie с помощью OkHttp 3   -  person Minn    schedule 10.03.2020


Ответы (1)


В конце концов я изменил OkHttp на HttpClient (от Apache), и он работает хорошо.

Код, который я использовал:

private HttpClient httpClient;
private HttpContext httpContext = new BasicHttpContext();

public MyHttpClient() {
    httpClient = HttpClientBuilder.create().build();
    httpContext.setAttribute(HttpClientContext.COOKIE_STORE, new BasicCookieStore());
}
person atp    schedule 10.03.2020