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!

24
demandé sur javajavajavajavajava 2011-09-28 18:10:16

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.

3
répondu Jay 2013-03-13 16:28:47

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);
1
répondu Sathesh 2013-03-11 06:17:49

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 :)

0
répondu Konstantin Schubert 2017-08-13 10:36:25

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

-2
répondu gnB 2017-05-23 10:31:18

prépondérant onPageStarted rappel dans votre WebView

-3
répondu A.Quiroga 2011-09-28 14:23:45

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.

-5
répondu Unknown_Rebel 2013-03-05 15:42:33