Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Получение cookies с помощью HttpClient


(Kotor) #1

Здравствуйте  коллеги,

У меня возникла проблема с получением cookie после отправки post реквеста с помощью HttpClient. 

Собственно пример:

 

 

DefaultHttpClient httpClient = new DefaultHttpClient();
 
HttpPost httpPost = new HttpPost("https://some.url");
 
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("D5", "value1"));
formparams.add(new BasicNameValuePair("D6", "value2"));
 
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams);
httpPost.setEntity(entity);
  
HttpResponse response = httpClient.execute(httpPost);
 
List<Cookie> cookies = httpClient.getCookieStore().getCookies();
System.out.println(cookies.size());
 
 
 

Проблема в последнем блоке - метод getCookies() возвращает пустой лист. Однако, cookies точно должны возвращаться в случае с той страницей, с которой работаю. Подскажите, пожалуйста, что я мог упустить в своем коде, чтобы куки обрабатывались должным образом.

Заранее благодарю.

 


(KaNoN) #2

Тут может быть много вариантов. Проверьте, что:

  1. Запрос отправляется правильно. Важно смотреть не только на тело запроса, но и на другие параметры, в т.ч. заголовки. Для чистоты эксперимента, попробуйте воспроизвести операцию вручную, при этом перехватывая трафик (для этого можно использовать Fiddler). Нужно удостовериться, что все параметры запроса включены
  2. Запрос возвращает корректный ответ. Это следствие из 1-го пункта. Возможно, операция просто не выполнилась. Из примера явно не видно этого и явно не проверяется
  3. Возножно, значение Cookie надо искать не в httpClient.getCookieStore, а в заголовках ответа.

(Kotor) #3

Благодарю за ответ. Fiddler очень помог в решении задачи. Оказалось, что искомые кукис генерились джава скриптом. Из-за редиректов, я не мог увидеть место их генерации средствами браузера. 

Кому интересно, всю эту штуку я делал для того, чтобы иметь возможность работать с пост реквестами и веб-драйвером одновременно. Это получилось. HtmlUnit конечно проще использовать для таких задач, но если нужно взаимодействие с браузером (как в моем случае), то его средства весьма ограничены. 


(Taras) #4

browser mob proxy лучше используйте для етого