Apache HttpClient 4.0.3 - как мне установить cookie с sessionID для POST-запроса? - PullRequest
44 голосов
/ 12 ноября 2010

подскажите, как хранить 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());

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

Ответы [ 4 ]

41 голосов
/ 11 октября 2011

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

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); 

Так просто!

22 голосов
/ 25 февраля 2011

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

HttpContext localContext = new BasicHttpContext();

localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

response = client.execute(httppost, localContext);
10 голосов
/ 21 декабря 2015
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");
2 голосов
/ 17 декабря 2015

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

...