Définir les informations d'identification sur une Webview Android à l'aide de la connexion HTTPS sécurisée
Je voudrais créer une Webview Android qui se connecte à un site web par le biais d'une facilité de HTTPS
relation avec l'utilisation des informations d'identification.
Première difficulté a été d'accepter le certificat (privé), il a été résolu avec cette très utile post.
Deuxième difficulté est d'utiliser les informations d'identification, j'ai trouvé cette post.
(première réponse de dparnas) qui semble traiter assez bien avec elle, mais il parle de HTTP
de connexion et de ne pas HTTPS
. J'ai essayé, mais il ne marche pas, je viens d'atteindre le formulaire de connexion à la page sans afficher de message d'erreur, juste la normale formulaire vierge.
Voici mon code:
import android.app.Activity;
import android.net.http.SslError;
import android.os.Bundle;
import android.webkit.HttpAuthHandler;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class ConnectorWebView extends Activity {
WebView mWebView;
String mUsrName;
String mPassC;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.connwebview);
//Getting info from Intent extras
//Get it if it s different from null
Bundle extras = getIntent().getExtras();
mUsrName = extras != null ? extras.getString("username") : null;
mPassC = extras != null ? extras.getString("passcode") : null;
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setHttpAuthUsernamePassword("myhost.com", "myrealm", mUsrName, mPassC);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm){
handler.proceed(mUsrName, mPassC);
}
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
handler.proceed() ;
}
});
mWebView.loadUrl("https://myhost.com/secured_area");
}
}
OriginalL'auteur Mbolland | 2010-12-27
Vous devez vous connecter pour publier un commentaire.
Car il semble que
WebView
ne peut pas gérer nativementBasic
authentification lors de l'utilisationHTTPS
, j'ai commencé à jouer avec l'idée de la création duAuthorization
en-tête (contenant de l'encodage du nom d'utilisateur/mot de passe) manuellement.Voici comment je pense que cela peut être fait:
Cela prend avantage de la
WebView.loadUrl (String url, Map<String, String> additionalHttpHeaders)
méthode et pour cet exemple, je suis en utilisant leBase64Encoder
de Apache Commons. Le Base64Encoder partie est assez banal et si vous ne voulez pas inclure les bibliothèques externes dans votre application (pour quelque raison que ce soit), vous pouvez toujours écrire votre propre (référence).Notez également que celui-ci
WebView.loadUrl (String url, Map<String, String> additionalHttpHeaders)
méthode est uniquement disponible dans l'API 8+. Pour référence, voir aussi l'article de Wikipedia sur L'Authentification De Base (qui traite les en-têtes, etc).OriginalL'auteur Marvin Pinto
La WebView classe ne fournit pas autant de souplesse que la connectivité en utilisant les classes de bas niveau (comme HttpPost ou autres) directement.
Si vous avez besoin de contrôle de la connexion au serveur -- compliquées autorisation des scénarios comme celui-ci -- utiliser les classes de bas niveau, récupérer les données, puis utiliser WebView.loadData() pour charger et afficher le code HTML.
Ici est un bon exemple de chargement de contenu à l'aide de SSL et un BasicCredentialProvider. Le résultat peut être chargé dans la WebView comme décrit ci-dessus.
"compliqué autorisation scénarios" hahahahhah, ce qui est totalement norme RFC de ans, webview doit gérer ce...
alors que je suis d'accord qu'il "devrait" -- et j'aimerais que ce soit! - webview expose un certain sous-ensemble de comportements que la pleine HTTP bibliothèque prend en charge...
OriginalL'auteur elijah
Scénario Alternatif:
Si prêt à écrire rond-point 10 lignes de javascript à l'aide de jQuery, ce scénario est plutôt simple.
Injecter du code javascript dans le webview ou dans le cas où vous êtes le contrôle de la page html que vous êtes en affichage, l'.
Si vous avez besoin de interface de retour de javascript, vous pouvez le faire. Pour les plus lourds de commande exchange, utilisez la
CordovaWebView
de l'Interface qui a un faible niveau de retard en fonction de l'api de niveau.OriginalL'auteur Philzen