43 votes

Comment empêcher un client http apache de suivre une redirection

Je me connecte à un serveur distant avec un client http apache. le serveur distant envoie une redirection, et je veux réaliser que mon client n'est pas à la suite de la rediriger automatiquement afin que je puisse extraire le propper en-tête et de faire ce que je veux avec la cible.

je suis à la recherche d'un travail simple exemple de code (copier coller) qui arrête la redirection automatique la suite d'un comportement.

j'ai trouvé la Prévention HttpClient 4 de redirection suivant, mais il semble que je suis trop stupide pour mettre en œuvre avec HttpClient 4.0 (GA)

49voto

Chris Points 4552

La magie, grâce à macbirdie , est:

 params.setParameter("http.protocol.handle-redirects",false);
 

Les importations sont omises, voici un exemple de copier-coller:

 HttpClient httpclient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();

// HTTP parameters stores header etc.
HttpParams params = new BasicHttpParams();
params.setParameter("http.protocol.handle-redirects",false);

// Create a local instance of cookie store
CookieStore cookieStore = new BasicCookieStore();

// Bind custom cookie store to the local context
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

// connect and receive 
HttpGet httpget = new HttpGet("http://localhost/web/redirect");
httpget.setParams(params);
response = httpclient.execute(httpget, localContext);

// obtain redirect target
Header locationHeader = response.getFirstHeader("location");
if (locationHeader != null) {
    redirectLocation = locationHeader.getValue();
  System.out.println("loaction: " + redirectLocation);
} else {
  // The response is invalid and did not provide the new location for
  // the resource.  Report an error or possibly handle the response
  // like a 404 Not Found error.
}
 

27voto

David Riccitelli Points 2787

Utilisation de HttpClient 4.3 et Fluent:

 final String url = "http://...";
final HttpClient client = HttpClientBuilder.create().disableRedirectHandling().build();
final Executor executor = Executor.newInstance(client);
final HttpResponse response = executor.execute(Request.Get(url)).returnResponse();
 

23voto

Caner Points 15625

Cela a fonctionné pour moi:

 HttpGet httpGet = new HttpGet("www.google.com");
HttpParams params = httpGet.getParams();
params.setParameter(ClientPNames.HANDLE_REDIRECTS, Boolean.FALSE);
httpGet.setParams(params);
 

16voto

macbirdie Points 9417

L'implémentation par défaut HttpClient est assez limitée en configuration, mais vous pouvez contrôler le traitement des redirections en utilisant le paramètre booléen de HttpClient http.protocol.handle-redirects .

Voir la documentation pour référence.

12voto

David Koski Points 680

Plutôt que d'utiliser directement la propriété, vous pouvez utiliser:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X