Установка файлов cookie для Android Espresso MockWebserver

Я попытался установить куки в своем Android Instrumentationtest следующим образом:

  @Override
protected MockResponse onDispatch(RecordedRequest request) {
    if (request.getPath().startsWith("/?loginkulcs=")) {
        MockResponse response = new MockResponse()
                .setStatus(new BasicStatusLine(new ProtocolVersion("HTTP",1,1), 302, "Moved Temporarily").toString())
                .setHeaders(new Headers.Builder()
                        .add("Date", LocalDateTime.now().toString("ddd, dd MMM yyyy HH:mm:ss Z"))
                        .add("Server", "GlassFish Server Open Source Edition 3.1.2.2")
                        .add("X-Powered-By", "Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2.2 Java/Oracle Corporation/1.7)")
                        .add("Location","https://xxx.jsp")
                        .add("Content-Type","text/html;charset=ISO-8859-1")
                        .add("Content-Language","en-US")
                        .add("Content-Length","227")
                        .add("Keep-Alive","timeout=5, max=100")
                        .add("Connection", "Keep-Alive")
                        .add("Set-Cookie", String.format("session_id=%s; Path=/xxx_teszt/", SESSION_ID))
                        .add("Set-Cookie", "regisztralt=IGEN; Path=/xxx_teszt/")
                        .add("Set-Cookie", "session_id=2084e74283d5073c5f4d324f17e2; Path=/xxx_teszt; HttpOnly")
                        .build());
        return response;
    }
    return null;

}

клиент Android - это org.apache.http.impl.client.DefaultHttpClient, и он читает файлы cookie следующим образом:

клиент.getCookieStore().getCookies();

Но результат нулевой. Как я могу установить файлы cookie для этого клиента?

спасибо

Замек


person zamek z    schedule 20.08.2018    source источник


Ответы (1)


это Cookie, а не Set-Cookie; см. MockWebServerTest, например:

.addHeader("Cookie: " + String.format("session_id=%s; Path=/xxx_teszt/", SESSION_ID))
person Martin Zeitler    schedule 20.08.2018
comment
Извините, оригинал работает так, есть идентификатор сеанса в файле cookie, когда я получаю код 302. Я не знаю, соответствует ли это стандарту или нет, но я должен это сделать. - person zamek z; 20.08.2018
comment
@zamekz вам придется исправить заголовки на стороне сервера, а затем исправить макет. страница после 302, которая затем отправляет 200, должна установить заголовки файлов cookie. или просто запустите один тест, который проверяет перенаправление 302, и другой, который проверяет пункт назначения перенаправления, который должен отправить 200. - person Martin Zeitler; 20.08.2018
comment
Я пытался установить код возврата 200 вместо 302, но куки пусты :( - person zamek z; 21.08.2018
comment
@zamekz действительно устанавливает какие-либо заголовки? - person Martin Zeitler; 21.08.2018
comment
Я использую только http. Он работает на действующем веб-сервере, я просто хочу создать для него тестовый пример, потому что я не могу генерировать тестовые данные на действующем веб-сервере. Живой веб-сервер работает с этими данными, я просто копирую данные заголовка из живых данных. Живой веб-сервер отправляет три разных файла cookie, я думаю, поэтому файлы cookie должны быть картой, которая содержит список в качестве значения. - person zamek z; 23.08.2018
comment
@zamekz только что нашел ошибку (которую я подозревал) и обновил свой ответ ... пожалуйста, примите, потому что URL-адрес тестов для фиктивного веб-сервера должен надежно отвечать на вопрос. - person Martin Zeitler; 23.08.2018
comment
Я проверил сохраненные значения после того, как создал его, и все вроде бы хорошо, за исключением того, что каждый ключ преобразован в маленькую букву: key:cookie value:regisztralt=IGEN; Путь=/enaplo_test/значение:session_id=32a53dc792a605b87d6ea75415be8e48; Путь=/enaplo_testzt/ - person zamek z; 23.08.2018
comment
@zamekz то же самое происходит с живым веб-сервером? не совсем ясно, действительно ли имена файлов cookie чувствительны к регистру, независимо от того, существуют ли 3 RFC, которые устарели друг от друга. некоторые утверждают, что они есть, другие говорят, что это не так. здесь в этом случае имеет значение только то, как обрабатываются файлы cookie работающего веб-сервера. - person Martin Zeitler; 23.08.2018
comment
Извините, это была моя ошибка, потому что я хотел напечатать все заголовки после добавления в ответ. Я мог бы получить его с помощью toMultiMap(), который преобразует все ключи заголовка в нижний регистр. Но отправленные заголовки были правильными, а не преобразованными. - person zamek z; 24.08.2018
comment
Я нашел проблему! Клиент отклонил файл cookie, потому что: недопустимый атрибут пути Путь источника/сообщения. В тесте мне не нужно использовать это свойство Path. Я удалил его, и он работает хорошо. Спасибо за помощь. - person zamek z; 27.08.2018