Подтвердить что ты не робот

Как обрабатывать файлы cookie с Apache HttpClient 4.3

Мне нужно реализовать серию HTTP-запросов в Java и решил использовать Apache HttpClient в версии 4.3 (самый последний).

Проблема заключается в том, что все эти запросы используют cookie для управления сеансом, и я, похоже, не могу найти способ доступа к этому файлу cookie и передать его из запроса для запроса. Мои команды в использовании curl выглядят примерно так:

# Login
curl -c cookies -d "UserName=username&Password=password" "https://example.com/Login"

# Upload a file
curl -b cookies -F [email protected]_0013.JPG "https://example.com/File"

# Get results of server processing file
curl -b cookies "https://example.com/File/1234/Content"

Они отлично работают. Однако с HttpClient это, похоже, не сработает. Я пытался:

    URI serverAddress = new URI("https://example.com/");

    URI loginUri = UriBuilder.fromUri(serverAddress).segment("Login").queryParam("UserName", "username")
            .queryParam("Password", "password").build();

    RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BEST_MATCH).build();
    CookieStore cookieStore = new BasicCookieStore();
    HttpClientContext context = HttpClientContext.create();
    context.setCookieStore(cookieStore);

    CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig).setDefaultCookieStore(cookieStore).build();
    HttpGet httpGet = new HttpGet(loginUri);
    CloseableHttpResponse loginResponse = httpClient.execute(httpGet,context);

    System.out.println(context.getCookieStore().getCookies());

Вывод последней строки всегда является пустым списком. Я думаю, что это должно содержать мое Cookie, я прав?

Может ли кто-нибудь дать мне небольшой пример того, как обрабатывать cookie с помощью Apache HttpClient 4.3?

Спасибо

4b9b3361

Ответ 1

Ваш код выглядит хорошо для меня (кроме освобождения ресурсов, но я предполагаю, что обработка исключений была опущена для краткости). Причина, по которой пустые хранилища cookie могут быть пустыми, может быть нарушением фактической политики файлов cookie (которая является BEST_MATCH в вашем случае) целевым сервером. Таким образом, файлы cookie, отправленные сервером, отклоняются как недопустимые. Вы можете узнать, если это так (и другие полезные контекстные данные), включив ведение журналов контекста/проводов, как описано здесь