Sto usando HttpClient 4.1.2Come posso ottenere i cookie da HttpClient?
HttpGet httpget = new HttpGet(uri);
HttpResponse response = httpClient.execute(httpget);
Così, come posso ottenere i valori dei cookie?
Sto usando HttpClient 4.1.2Come posso ottenere i cookie da HttpClient?
HttpGet httpget = new HttpGet(uri);
HttpResponse response = httpClient.execute(httpget);
Così, come posso ottenere i valori dei cookie?
Nota: il primo collegamento punta a qualcosa che funzionava in HttpClient V3. Trova le informazioni relative a V4 di seguito.
Questo dovrebbe rispondere alla tua domanda
http://www.java2s.com/Code/Java/Apache-Common/GetCookievalueandsetcookievalue.htm
Quello che segue è rilevante per V4:
... in aggiunta, i javadocs dovrebbero contenere ulteriori informazioni sulla gestione dei cookie
http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/index.html
ed ecco un tutorial per httpclient v4:
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/index.html
Ed ecco alcune pseudo-codice che aiuta (spero, si basa solo su documenti):
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...
Assicurarsi di leggere le javadocs per ResponseProcessCookies e AbstractHttpClient.
Ancora un altro per ottenere altre persone hanno iniziato, vedendo i metodi inesistenti a grattarsi la testa ...
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());
}
Ciò stamperà i valori dei cookie. La risposta del server può avere diverse Set-Cookie
campi di intestazione, quindi è necessario recuperare una serie di Header
s
Non certo perché la risposta accettata descrive un metodo getCookieStore()
che non esiste. Non è corretto
È necessario creare un archivio di cookie in anticipo, quindi creare il client utilizzando tale archivio di cookie. Quindi puoi in seguito fare riferimento a questo negozio di cookie per ottenere un elenco di cookie.
/* 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();
Sopra funziona per la versione 4.5. – Paul
La risposta accettata ha funzionato per la versione precedente di v4. Questo approccio funziona con l'ultimo. – Peter
Sì, questa dovrebbe essere la risposta accettata. Sto semplicemente migrando un vecchio httpclient (3.x a 4.3) a quello nuovo e questa risposta aiuta davvero. –
Come Matt Broekhuis risolta in un commento su this answer above, è possibile utilizzare DefaultHttpClient.getCookieStore()
nota, che nel momento in cui ho risposto il mio server era limitato a httpclient-4.2.5
. DefaultHttpClient
è ora obsoleto a partire dal 4.3. Lascerò qui questa risposta perché altri potrebbero trovarsi nella stessa situazione e il poster originale specificò che stavano usando 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);
}
}
che emette
[[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]]
base all'esempio nella domanda iniziale, il modo per accedere alla CookieStore
dopo l'esecuzione di una richiesta HTTP, è quello di utilizzare l'oggetto di stato HttpContext
esecuzione, che farà riferimento a archivio di cookie (nuovo se non è stato specificato CookieStore in HttpClientBuilder o un nuovo CookieStore) dopo l'esecuzione di una richiesta.
HttpClientContext context = new HttpClientContext();
CloseableHttpResponse response = httpClient.execute(request, context);
CookieStore cookieStore = context.getCookieStore();
Questo si basa sul httpcomponents-client: 4.3 e versioni successive, quando sono stati introdotti il ClosableHttpClient e InternalHttpClient.
ha appena aggiunto il link a javadocs per la versione corrente – mkro
ok, capito: per favore dare un'occhiata alla classe ResponseProcessCookies per maggiori dettagli. Sembra che HttpClientv4 lo usi (per impostazione predefinita) per popolare l'archivio dei cookie. Puoi accedervi da AbstractHttpClient.getCookieStore – mkro
Questo è il problema. Non riesco a trovare il metodo 'httpClient.getCookieStore();' – coffee