java - Apache HttpClient 4.0.3: cómo configuro la cookie con el ID de sesión para la solicitud POST
cookies apache-httpclient-4.x (4)
¿Puede decirme cómo almacenar jsessionid en una cookie, para que pueda pasar al servlet con una solicitud posterior? Estoy usando la versión 4.0.3 de Apache HttpClient. Todas las soluciones que he encontrado explican cómo hacer esto con HttpClient 3.1. He leído el tutorial y lo intenté, pero no funciona.
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);
Editar - explicaciones adicionales
Me estoy conectando a servlets escritos por un amigo. He iniciado sesión y obtuve jsessionid
. Ahora quiero enviar otra solicitud y necesito pasar jsessionid para fines de autorización. Servlet funciona bien porque usé java HttpURLConnection, configuré la cookie, la pasé y funcionó. Ahora, con HttpClient, no recibo excepciones, pero el código de retorno del servlet de mi amigo indica que no hubo sessionid en la solicitud.
Otro Editar - Tengo una solución . Establecí el parámetro del encabezado de solicitud y funcionó. Servlet reconoció sessionid.
httppost.setHeader("Cookie", "JSESSIONID="+ getSessionId());
Ahora mi pregunta es: ¿este método es correcto?
Estoy tan contento de resolver este problema:
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);
¡Tan fácil!
Lo hice pasando la cookie a través del HttpContext:
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
response = client.execute(httppost, localContext);
Probablemente deberías establecer todas las propiedades de las cookies no solo su valor. setPath()
, setDomain()
... etc
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
response = client.execute(httppost, localContext);
no funciona en la versión 4.5 sin
cookie.setDomain(".domain.com");
cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "true");