Sto usando HttpClient
4.1 in un'app Android e sto cercando di rendere più intelligente il fatto che le richieste API della mia app siano intercettate da uno di quegli schermi "è necessario accedere o pagare per il wifi".Rileva e gestisce la necessità di accedere per il wifi
Desidero visualizzare una visualizzazione Web che consente all'utente di accedere.
Ho cercato di intercettare il reindirizzamento in httpClient, ma non ho successo.
Questo è quello che sto attualmente cercando:
this.client = new DefaultHttpClient(connectionManager, params);
((DefaultHttpClient) this.client).setRedirectStrategy(new DefaultRedirectStrategy() {
public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) {
boolean isRedirect = Boolean.FALSE;
try {
isRedirect = super.isRedirected(request, response, context);
} catch (ProtocolException e) {
Log.e(TAG, "Failed to run isRedirected", e);
}
if (!isRedirect) {
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == 301 || responseCode == 302) {
throw new WifiLoginNeeded();
// The "real implementation" should return true here..
}
} else {
throw new WifiLoginNeeded();
}
return isRedirect;
}
});
E poi nella mia attività:
try {
response = httpClient.get(url);
} catch (WifiLoginNeeded e){
showWifiLoginScreen();
}
dove l'esposizione dello schermo wifi fa questo:
Uri uri = Uri.parse("http://our-site.com/wifi-login");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
Il pensiero is this:
- mio API sarà mai reindirizzare legittimamente
- Così ho configurato HttpClient di gettare il mio RuntimeException speciale quando è reindirizzato
- Cattura tale eccezione nel codice attività e pop un Webview per farli indirizzati alla schermata di login
- Una volta login, wifi-login si congratula con loro per un lavoro ben fatto e li richiama nell'app
Il fatto è che non ho mai ricevuto l'eccezione WifiLoginNeeded. Qual è il modo preferito per realizzare questo con Android?
Innanzitutto, assicurarsi che il proprio server http restituisca la risposta http corretta (301 o 302). – yorkw
Il fatto è che non è il mio server che esegue il reindirizzamento. È uno di quei punti di accesso Wi-Fi che punta tutto sulla pagina "Accedi alle nostre costose WiFi". Quindi ho bisogno di cogliere ogni caso che possiamo pensare per le chiamate HTTP reindirizzate. –
Potrebbe anche non essere il tipo di reindirizzamento che ti aspetti, assicurati anche che i codici che ti aspetti vengano generati. Il punto di accesso non deve restituire il particolare codice HTTP che ci si aspetta e potrebbe inviare felicemente un [200] che indica che tutto va bene mentre si indirizza alle schermate di accesso del proprio punto di accesso. Si consiglia di memorizzare l'indirizzo IP del proprio sito e confrontarlo con l'indirizzo IP restituito dall'ultima richiesta http. Se sono diversi, richiama la schermata di accesso. – RightHandedMonkey