web-dev-qa-db-fra.com

Apache HttpClient 4.0.3 - comment définir un cookie avec sessionID pour POST request?

pouvez-vous me dire comment stocker jsessionid dans un cookie, afin qu'il puisse être transmis au servlet avec une demande de publication? J'utilise Apache HttpClient version 4.0.3. Toutes les solutions que j'ai trouvées expliquent comment faire cela avec HttpClient 3.1. J'ai lu le tutoriel et l'ai essayé, mais cela ne fonctionne pas.

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

Modifier - plus d'explications
Je me connecte à des servlets écrits par un ami. Je me suis connecté et j'ai obtenu jsessionid. Maintenant, je veux envoyer une autre demande et dois passer jsessionid à des fins d'autorisation. Le servlet fonctionne très bien car j'ai utilisé Java HttpURLConnection, définir le cookie, le transmettre et cela a fonctionné. Maintenant avec HttpClient, je n'ai aucune exception, mais le code de retour du servlet d'un ami indique qu'il n'y avait pas de sessionid dans le demande.

n autre Edit - j'ai une solution J'ai défini le paramètre d'en-tête de demande et cela a fonctionné. Servlet reconnu sessionid.
httppost.setHeader("Cookie", "JSESSIONID="+ getSessionId());

Maintenant, ma question est: cette méthode est-elle correcte?

44
hitan

Je suis si heureux de résoudre ce problème:

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

Si facile!

41
Keith Lee

Je l'ai fait en passant le cookie à travers le HttpContext:

HttpContext localContext = new BasicHttpContext();

localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

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

ne fonctionne pas dans la version 4.5 sans

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

Vous devriez probablement définir toutes les propriétés des cookies et pas seulement leur valeur. setPath(), setDomain() ... etc

2
Ramdane Oualitsen