Ich verbinde mich mit meiner AppEngine-Anwendung mithilfe der Apache HttpComponents-Bibliothek. Um meine Benutzer zu authentifizieren, muss ich ein Authentifizierungs-Token an die Login-Adresse der Anwendung übergeben (http://myapp.appspot.com/_ah/login?auth=...) Und ein Cookie aus der Kopfzeile der Antwort holen. Die Anmeldeseite antwortet jedoch mit einem Redirect-Statuscode, und ich weiß nicht, wie ich HttpClient davon abhalte, der Weiterleitung zu folgen, wodurch verhindert wird, dass ich den Cookie abfange.Verhindern, dass HttpClient 4 der Weiterleitung folgt
Fwiw, die tatsächliche Methode, die ich benutze, um die Anfrage zu senden, ist unten.
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
}
}
}
Wie würde ich den Client daran hindern, der Weiterleitung zu folgen?
Danke.
aktualisieren:
Gemäß der Lösung unten, ich habe folgende nach einem DefaultHttpClient client
Erstellen (und bevor es an die execute
Methode übergeben):
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;
}
});
}
ausführlich Mehr als es scheint muss sein, aber nicht so schwierig wie ich dachte.
Beachten Sie, dass Sie einen RedirectHandler festgelegt haben, der für alle nachfolgenden Anforderungen wirksam bleibt - nicht nur für die Anfrage von Interesse.Wenn Sie also weitere Requests ausgeben, die eine korrekte Weiterleitung erfordern, sollten Sie nach dem Ausführen einen client.setRedirectHandler (new DefaultRedirectHandler()) ausführen. – Torid