Je me connecte à mon application AppEngine à l'aide de la bibliothèque Apache HttpComponents. Pour authentifier mes utilisateurs, je dois passer un jeton d'authentification à l'adresse de connexion de l'application (http://myapp.appspot.com/_ah/login?auth=...) Et récupérer un cookie dans l'en-tête de la réponse. Cependant, la page de connexion répond avec un code d'état de redirection, et je ne sais pas comment empêcher HttpClient de suivre la redirection, ce qui m'empêche d'intercepter le cookie. Fwiw, la méthode actuelle que j'utilise pour envoyer la demande est ci-dessous.Prévention de HttpClient 4 à partir de la redirection suivante
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
}
}
}
Comment empêcher le client de suivre la redirection?
Merci.
Mise à jour:
Selon la solution ci-dessous, je l'ai fait, après la création d'un DefaultHttpClient client
(et avant de passer à la méthode 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;
}
});
}
Un peu plus bavard il semble que doit être, mais pas aussi difficile que je pensais.
Notez qu'une fois que vous avez défini un RedirectHandler qui reste actif pour toutes les demandes suivantes - pas seulement la demande d'intérêt ici.Donc, si vous êtes en train d'émettre d'autres requêtes qui peuvent nécessiter une redirection pour s'exécuter correctement, vous voudrez faire un client.setRedirectHandler (new DefaultRedirectHandler()) après l'exécution. – Torid