Comment intercepter les données POST dans un android webview
j'ai une application android qui se compose d'une webview. Il doit permettre aux utilisateurs de remplir un formulaire sur une page web, puis de modifier les données du formulaire une fois que l'utilisateur a cliqué sur submit
sur le formulaire. Le formulaire utilisera la méthode de la demande postale.
Donc ma question est: Comment puis-je intercepter les données POST à partir du formulaire, changer ses valeurs, puis l'envoyer?
par exemple: S'il y a un formulaire web comme celui-ci...
<form action="http://www.example.com/do.php" method="post">
<input type="text" name="name" />
<input type="text" name="email" />
<input type="submit" />
</form>
Si l'utilisateur entre nom = Steve et e-mail = steve@steve.com dans le formulaire, je veux changer les valeurs de name = bob et e-mail = bob@bob.com dans l'application android et avoir le nouveau POSTE sera envoyé à http://www.example.com/do.php
.
merci de votre aide!
6 réponses
si vous connaissez JavaScript, je vous suggère D'utiliser JavaScript. Je pense que c'est plus pratique et facile. visite vous indique comment utiliser JavaScript dans un WebView.
si vous soumettez le formulaire en utilisant la méthode postUrl (), alors vous pouvez outrepasser la méthode postUrl dans votre objet WebView comme ceci.
WebView mWebView = new WebView(this){
@Override
public void postUrl(String url, byte[] postData)
{
System.out.println("postUrl can modified here:" +url);
super.postUrl(url, postData);
}};
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
linearLayout.addView(mWebView);
j'ai écrit une bibliothèque avec un WebViewClient spécial qui offre un < modifié!--0-- > où vous pouvez avoir accès aux données post.
https://github.com/KonstantinSchubert/request_data_webviewclient
malheureusement, mon implémentation ne fonctionne que pour les requêtes XMLHttpRequest (AJAX). Mais quelqu'un d'autre a déjà rédigé comment cela serait fait pour les données de formulaire: https://github.com/KeejOow/android-post-webview
Entre les deux dépôts, vous devriez être capable de trouver votre réponse :)
j'ai bien aimé la proposition d' public void postUrl (String url, byte[] postData) , mais malheureusement il ne fonctionne pas pour moi.
ma solution pour juste à intercepter la requête POST:
- avoir une sous-classe WebViewClient qui est définie pour WebView
- remplacer public void onPageStarted (WebView view, String url, Bitmap favicon) examiner les données de la demande et agir en conséquence (selon exigences)
extrait de Code et autres réflexions ici:https://stackoverflow.com/a/9493323/2162226
je pense que vous pouvez utiliser shouldInterceptRequest(WebView view, String url)
méthode de WebViewClient, mais elle est supportée dans L'API après 11.