Mi sto connettendo all'applicazione AppEngine utilizzando la libreria Apache HttpComponents. Per autenticare i miei utenti, ho bisogno di passare un token di autenticazione insieme all'indirizzo di login dell'applicazione (http://myapp.appspot.com/_ah/login?auth=...) E prendere un cookie dall'intestazione della risposta. Tuttavia, la pagina di accesso risponde con un codice di stato di reindirizzamento e non so come impedire a HttpClient di seguire il reindirizzamento, impedendomi così di intercettare il cookie.Prevenzione di HttpClient 4 dal seguente reindirizzamento
Fwiw, il metodo effettivo che utilizzo per inviare la richiesta è riportato di seguito.
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
}
}
}
Come si può impedire al client di seguire il reindirizzamento?
Grazie.
Aggiornamento:
Come per la soluzione qui di seguito, ho fatto la seguente dopo aver creato un DefaultHttpClient client
(e prima di passarlo al metodo 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;
}
});
}
più dettagliato di quello che sembra esso deve essere, ma non così difficile come pensavo.
Si noti che una volta impostato un RedirectHandler che rimane valido per tutte le Richieste successive, non solo la Richiesta di interesse qui.Quindi, se stai per emettere ulteriori Richieste che potrebbero richiedere il reindirizzamento per l'esecuzione corretta, dovrai eseguire un client.setRedirectHandler (nuovo DefaultRedirectHandler()) dopo l'esecuzione. – Torid