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

Apache HttpClient 4.0.3 - как установить cookie с sessionID для запроса POST

Можете ли вы рассказать мне, как хранить jsessionid в cookie, чтобы его можно было передать сервлету с запросом на отправку? Я использую Apache HttpClient версии 4.0.3. Все решения, которые я нашел, объясняют, как это сделать с HttpClient 3.1. Я прочитал учебник и пробовал это, но он не работает.

HttpPost httppost = new HttpPost(postData);
CookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", getSessionId());
cookieStore.addCookie(cookie);
client.setCookieStore(cookieStore);
response = client.execute(httppost);

Изменить - дополнительные пояснения
Я подключаюсь к сервлетам, написанным другом. Я вошел в систему и получил jsessionid. Теперь я хочу отправить другой запрос и передать jsessionid для цели авторизации. Сервлет отлично работает, потому что я использовал java HttpURLConnection, установил cookie, передал его, и он сработал. Теперь с HttpClient я не получаю исключений, но код возврата из сервлета друга указывает, что в запросе не было сеанса.

Другое Редактировать - у меня есть одно решение Я задал параметр заголовка запроса, и он сработал. Сервл понимается sessionid.
httppost.setHeader("Cookie", "JSESSIONID="+ getSessionId());

Теперь мой вопрос: правильно ли этот метод?

4b9b3361

Ответ 1

Я так рад решить эту проблему:

HttpPost httppost = new HttpPost(postData); 
CookieStore cookieStore = new BasicCookieStore(); 
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", getSessionId());

//cookie.setDomain("your domain");
cookie.setPath("/");

cookieStore.addCookie(cookie); 
client.setCookieStore(cookieStore); 
response = client.execute(httppost); 

Так просто!

Ответ 2

Я сделал это, передав файл cookie через HttpContext:

HttpContext localContext = new BasicHttpContext();

localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

response = client.execute(httppost, localContext);

Ответ 3

HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
response = client.execute(httppost, localContext);

не работает в версии 4.5 без

cookie.setDomain(".domain.com");
cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "true");

Ответ 4

Вероятно, вы должны установить все свойства cookie не только его значение. setPath(), setDomain()... и т.д.