studio org libreria importar example defaulthttpclient android google-app-engine apache-commons

android - org - Evitar que HttpClient 4 siga la redirección



importar httpclient android studio (5)

Con la versión 4.3.x de HttpClient está directamente en clientBuilder .

entonces cuando construyas tu Cliente, usa:

CloseableHttpClient client = clientBuilder.disableRedirectHandling().build();

Sé que es una vieja pregunta, pero también tuve este problema y quiero compartir mi solución.

Me estoy conectando a mi aplicación App Engine usando la biblioteca Apache HttpComponents. Para autenticar a mis usuarios, necesito pasar un token de autenticación junto a la dirección de inicio de sesión de la aplicación ( http://myapp.appspot.com/_ah/login?auth=.. ) y tomar una cookie del encabezado del respuesta. Sin embargo, la página de inicio de sesión responde con un código de estado de redireccionamiento, y no sé cómo evitar que HttpClient siga el redireccionamiento, impidiéndome interceptar la cookie.

Fwiw, el método real que uso para enviar la solicitud está debajo.

private void execute(HttpClient client, HttpRequestBase method) { // Set up an error handler BasicHttpResponse errorResponse = new BasicHttpResponse( new ProtocolVersion("HTTP_ERROR", 1, 1), 500, "ERROR"); try { // Call HttpClient execute client.execute(method, this.responseHandler); } catch (Exception e) { errorResponse.setReasonPhrase(e.getMessage()); try { this.responseHandler.handleResponse(errorResponse); } catch (Exception ex) { // log and/or handle } } }

¿Cómo evitaría que el cliente siga la redirección?

Gracias.

Actualización :

Según la solución a continuación, hice lo siguiente después de crear un DefaultHttpClient client (y antes de pasarlo al método de execute ):

if (!this.followRedirect) { client.setRedirectHandler(new RedirectHandler() { public URI getLocationURI(HttpResponse response, HttpContext context) throws ProtocolException { return null; } public boolean isRedirectRequested(HttpResponse response, HttpContext context) { return false; } }); }

Más prolijo de lo que parece que tiene que ser, pero no tan difícil como pensaba.


El RedirectHandler parece estar en desuso, logré desactivarlo automáticamente siguiendo las respuestas de redireccionamiento al cambiar la RedirecciónEstrategia por defecto para el perfil predeterminadoHttpCliente esto:

httpClient.setRedirectStrategy(new RedirectStrategy() { @Override public boolean isRedirected(HttpRequest httpRequest, HttpResponse httpResponse, HttpContext httpContext) throws ProtocolException { return false; } @Override public HttpUriRequest getRedirect(HttpRequest httpRequest, HttpResponse httpResponse, HttpContext httpContext) throws ProtocolException { return null; } });

En el lado negativo, esto nos vincula a una implementación específica del HttpClient, pero hace el trabajo.


Intenta usar un RedirectHandler . Eso puede requerir la extensión de DefaultHttpClient para devolver su implementación personalizada desde createRedirectHandler() .


Puedes hacerlo con los parámetros http:

final HttpParams params = new BasicHttpParams(); HttpClientParams.setRedirecting(params, false);

El método no tiene javadoc, pero si miras la fuente puedes ver que establece:

HANDLE_REDIRECTS

que controla:

Define si las redirecciones se deben manejar automáticamente