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?
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.
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();
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 Header
s
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.
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]]