Evitar que HttpClient 4 siga la redirecció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.

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

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.

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.