Как обрабатывать файлы 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?
Спасибо
Ответы
Ответ 1
Ваш код выглядит хорошо для меня (кроме освобождения ресурсов, но я предполагаю, что обработка исключений была опущена для краткости). Причина, по которой пустые хранилища cookie могут быть пустыми, может быть нарушением фактической политики файлов cookie (которая является BEST_MATCH в вашем случае) целевым сервером. Таким образом, файлы cookie, отправленные сервером, отклоняются как недопустимые. Вы можете узнать, если это так (и другие полезные контекстные данные), включив ведение журналов контекста/проводов, как описано здесь