web-dev-qa-db-fra.com

Comment puis-je obtenir les cookies de HttpClient?

J'utilise HttpClient 4.1.2

HttpGet httpget = new HttpGet(uri); 
HttpResponse response = httpClient.execute(httpget);

Alors, comment puis-je obtenir les valeurs des cookies?

36
coffee

Remarque: le premier lien pointe vers quelque chose qui fonctionnait auparavant dans HttpClient V3. Trouvez ci-dessous les informations relatives à la V4.

Ceci devrait répondre à votre question

http://www.Java2s.com/Code/Java/Apache-Common/GetCookievalueandsetcookievalue.htm

Les éléments suivants sont pertinents pour V4:

... en outre, les javadocs devraient contenir plus d'informations sur la gestion des cookies

http://hc.Apache.org/httpcomponents-client-ga/httpclient/apidocs/index.html

et voici un tutoriel pour httpclient v4:

http://hc.Apache.org/httpcomponents-client-ga/tutorial/html/index.html

Et voici un pseudo-code qui aide (j'espère qu'il est basé uniquement sur des documents):

HttpClient httpClient = new DefaultHttpClient();
// execute get/post/put or whatever
httpClient.doGetPostPutOrWhatever();
// get cookieStore
CookieStore cookieStore = httpClient.getCookieStore();
// get Cookies
List<Cookie> cookies = cookieStore.getCookies();
// process...

Veuillez vous assurer de lire les javadocs pour ResponseProcessCookies et AbstractHttpClient.

8
mkro

Je ne sais pas pourquoi la réponse acceptée décrit une méthode getCookieStore() qui n'existe pas. C'est incorrect.

Vous devez au préalable créer un magasin de cookies, puis créer le client à l'aide de ce magasin de cookies. Vous pourrez ensuite vous référer ultérieurement à ce magasin de cookies pour obtenir une liste des cookies.

/* init client */
HttpClient http = null;
CookieStore httpCookieStore = new BasicCookieStore();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultCookieStore(httpCookieStore);
http = builder.build();

/* do stuff */
HttpGet httpRequest = new HttpGet("http://stackoverflow.com/");
HttpResponse httpResponse = null;
try {httpResponse = http.execute(httpRequest);} catch (Throwable error) {throw new RuntimeException(error);}

/* check cookies */
httpCookieStore.getCookies();
47
Alex

Encore une autre pour faire démarrer d'autres personnes, en voyant des méthodes inexistantes se gratter la tête ...

import org.Apache.http.Header;
import org.Apache.http.HttpResponse;

Header[] headers = httpResponse.getHeaders("Set-Cookie");
for (Header h : headers) {
    System.out.println(h.getValue().toString());  
}

Cela imprimera les valeurs des cookies. La réponse du serveur peut avoir plusieurs Set-Cookie champs d'en-tête, vous devez donc récupérer un tableau de Headers

12
Kovács Imre

Sur la base de l'exemple de la question initiale, la façon d'accéder à CookieStore après avoir exécuté une requête HTTP, consiste à utiliser l'objet d'exécution d'état HttpContext.

HttpContext fera référence à un magasin de cookies (nouveau si aucun CookieStore n'a été spécifié dans HttpClientBuilder) après l'exécution d'une demande.

HttpClientContext context = new HttpClientContext();
CloseableHttpResponse response = httpClient.execute(request, context);
CookieStore cookieStore = context.getCookieStore();

Cela s'applique le httpcomponents-client:4.3+ lorsque le ClosableHttpClient a été introduit.

4

Comme Matt Broekhuis a répondu dans un commentaire sur cette réponse ci-dessus , vous pouvez utiliser DefaultHttpClient.getCookieStore()

Notez qu'au moment où j'ai répondu, mon serveur était limité à httpclient-4.2.5. DefaultHttpClient est désormais obsolète depuis 4.3. Je vais laisser cette réponse ici parce que d'autres pourraient se retrouver dans la même situation et l'affiche originale spécifiait qu'ils utilisaient 4.1.2.

import org.Apache.http.client.methods.HttpGet;
import org.Apache.http.client.methods.HttpUriRequest;
import org.Apache.http.cookie.Cookie;
import org.Apache.http.impl.client.DefaultHttpClient;

import Java.io.IOException;
import Java.util.List;

public class So8733758 {

  public static void main(String... args) throws IOException {
    final HttpUriRequest request = new HttpGet("http://stackoverflow.com");
    final DefaultHttpClient http = new DefaultHttpClient();
    http.execute(request);
    final List<Cookie> cookies = http.getCookieStore().getCookies();
    System.out.println(cookies);
  }
}

qui sort

[[version: 0][name: __cfduid][value: de2dfa8314f565701cf7b3895206f04d81457380383][domain: .stackoverflow.com][path: /][expiry: Tue Mar 07 11:53:03 PST 2017], [version: 0][name: prov][value: eeee9738-c50b-44f6-a8aa-b54966db1a88][domain: .stackoverflow.com][path: /][expiry: Thu Dec 31 16:00:00 PST 2054]]
1
Kirby