estoy usando HttpClient 4.1.2¿Cómo puedo obtener las cookies de HttpClient?
HttpGet httpget = new HttpGet(uri);
HttpResponse response = httpClient.execute(httpget);
Entonces, ¿cómo puedo obtener los valores de las cookies?
estoy usando HttpClient 4.1.2¿Cómo puedo obtener las cookies de HttpClient?
HttpGet httpget = new HttpGet(uri);
HttpResponse response = httpClient.execute(httpget);
Entonces, ¿cómo puedo obtener los valores de las cookies?
Nota: El primer enlace apunta a algo que solía funcionar en HttpClient V3. Encuentra información relacionada con V4 a continuación.
Esto debe responder a su pregunta
http://www.java2s.com/Code/Java/Apache-Common/GetCookievalueandsetcookievalue.htm
El siguiente es relevante para V4:
... Además, los javadocs deben contener más información sobre la administración de cookies
http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/index.html
y aquí hay un tutorial para httpclient v4:
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/index.html
Y aquí es un poco de pseudo-código que ayuda (espero, se basa únicamente en documentos):
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...
Por favor asegúrese de leer las javadocs para ResponseProcessCookies y AbstractHttpClient.
Sin embargo, otro para llegar a otras personas comenzaron, al ver que no existen métodos rascándose la cabeza ...
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());
}
Esto imprimirá los valores de las cookies. La respuesta del servidor puede tener varios Set-Cookie
campos de cabecera, por lo que necesita para recuperar una matriz de Header
s
No sé por qué la respuesta aceptada describe un método getCookieStore()
que no existe. Eso es incorrecto.
Debe crear una tienda de cookies de antemano, luego compilar el cliente utilizando ese almacén de cookies. Luego, puede consultar esta tienda de cookies para obtener una lista de 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();
Arriba funciona para la versión 4.5. – Paul
La respuesta aceptada funcionó para la versión anterior de v4. Este enfoque funciona con el último. – Peter
Sí, esta debería ser la respuesta aceptada. Solo estoy migrando un httpclient antiguo (3.xa 4.3) al nuevo y esta respuesta realmente ayuda. –
Como Matt Broekhuis respondió en un comentario en this answer above, puede utilizar DefaultHttpClient.getCookieStore()
Tenga en cuenta, que en el momento que yo respondí mi servidor estaba limitada a httpclient-4.2.5
. DefaultHttpClient
ahora está en desuso a partir de 4.3. Voy a dejar esta respuesta aquí porque otros pueden encontrarse en la misma situación y el cartel original especificó que estaban 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);
}
}
que emite
[[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]]
Basado en el ejemplo de la pregunta inicial, la forma de acceder al CookieStore
después de ejecutar una solicitud HTTP, es mediante el uso del objeto de estado HttpContext
ejecución, que hará referencia a un cookie store (nuevo si no se especificó CookieStore en HttpClientBuilder, o en una nueva CookieStore) después de que se ejecuta una solicitud.
HttpClientContext context = new HttpClientContext();
CloseableHttpResponse response = httpClient.execute(request, context);
CookieStore cookieStore = context.getCookieStore();
Esto se basa en httpcomponents-cliente: 4.3+ cuando se introdujeron la ClosableHttpClient y InternalHttpClient.
acaba de agregar el enlace a javadocs para la versión actual – mkro
bien, lo tengo: por favor, eche un vistazo a la clase ResponseProcessCookies para más detalles. HttpClientv4 parece usarlo (de forma predeterminada) para llenar el almacén de cookies. Puede acceder desde AbstractHttpClient.getCookieStore – mkro
Este es el problema. No puedo encontrar el método 'httpClient.getCookieStore();' – coffee