Ho studiato e ricercato e ricercato questo fino a che non sono diventato grigio e calvo. Come diavolo faccio a ottenere un WebView a lavorare per un sito che ha bisogno di autenticazione HTTP di base tramite una connessione HTTPS a livello di API 8+webview android con connessione https e autenticazione di base. Come farlo funzionare?
Ho il seguente codice
String email = Util.getEmail(this);
String pwd = Util.getPassword(this);
webview.getSettings().setJavaScriptEnabled(true);
webview.setHttpAuthUsernamePassword(Config.SERVER_BASE_URL, "Application", email, pwd);
// webview.setWebViewClient(new MobileWebViewClient(this));
webview.loadUrl(url);
Come potete vedere ho fatto avere un client vista web (Ora commentata) che ridefinisce il metodo onReceivedHttpAuthRequest che assomiglia a questo
@Override
public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm){
String email = Util.getEmail(wvContext);
String pwd = Util.getPassword(wvContext);
if(!pwd.equalsIgnoreCase("-1") && !pwd.equalsIgnoreCase("-1")){
handler.proceed(email, pwd);
}
}
questo è stato utilizzato senza il webview.setHttpAuthUsernamePassword e funziona bene, tranne che significa 2 richieste vengono emesse al w ebsite - Il primo ottiene un 401 e poi il client entra in gioco con il roba di autorizzazione Questo va bene per una piccola quantità di traffico sul sito Web, ma dimezzare la quantità di traffico (attualmente con una media di 49 richieste p/m) è il nome del gioco in questo momento !
Ho letto che posso preventivamente fornire le credenziali utilizzando
webview.setHttpAuthUsernamePassword(Config.SERVER_BASE_URL, "Application", email, pwd);
Tuttavia questo solo si traduce in HTTP di base: Accesso negato errori La costante di base del server URL è il nome di dominio per il sito cioè https://example.com (senza la pagina) l'url effettivo è https://example.com/some_pages. Non fa differenza se utilizzo l'url completo o il dominio. Ho controllato il regno e l'ho corretto e ho usato solo stringhe vuote fornendo solo e-mail e password. Questo potrebbe essere qualcosa a che fare con il fatto che il sito utilizza https? Il mio codice sembra funzionare bene sul mio box di sviluppo senza https ma potrebbe essere una falsa pista.!
Le uniche domande di overflow dello stack che sembrano coprire i miei requisiti non hanno risposte accettate e i documenti non sono di alcun aiuto che io possa vedere.
Ora ho una tale ammaccatura nella mia testa da sbattere contro un muro di mattoni che sto pensando di ottenere un cappello quadrato.
Per favore, se qualcuno mi può dare la soluzione a questo sarò per sempre in debito con te! Potrei persino inviarti un e-Mail KitKat
Io lo prendo [questa domanda e la sua risposta accettata] (http://stackoverflow.com/questions/1968416/how-to-do-http-authentication-in-android) non risolve il problema ? –
@aaamos, Potrebbe benissimo risolvere il mio problema, ma come potrei applicarlo a una WebView? – jamesc
Hai provato a scaricare la pagina Web con un httppost e quindi a fornirla a una visualizzazione Web? – Warpzit