web-dev-qa-db-ja.com

傍受する方法POSTデータをAndroidウェブビューで

AndroidアプリはWebビューで構成されています。ユーザーがWebページのフォームに入力し、ユーザーがsubmit on the form。フォームはPOSTリクエストメソッドを使用します。

だから私の質問はPOSTフォームからのデータをインターセプトし、値を変更して、一緒に送信するにはどうすればよいですか?

例:このようなWebフォームがある場合...

<form action="http://www.example.com/do.php" method="post">
    <input type="text" name="name" />
    <input type="text" name="email" />
    <input type="submit" />
</form>

ユーザーがフォームにname = Steveとemail = [email protected]を入力した場合、Android appの値をname = bobおよびemail = [email protected]に変更します。新しいPOSTをhttp://www.example.com/do.phpに送信します。

ご協力いただきありがとうございます!

30

JavaScriptに精通している場合は、JavaScriptの使用をお勧めします。もっと便利で簡単だと思います。 これ ツアーでは、WebViewでJavaScriptを使用する方法を説明しています。

3
Jay

投稿データにアクセスできるように変更されたshouldOverrideUrlLoadingを提供する特別なWebViewClientを使用してライブラリを作成しました。

https://github.com/KonstantinSchubert/request_data_webviewclient

残念ながら、私の実装はXMLHttpRequest(AJAX)リクエストに対してのみ機能します。しかし、他の誰かがすでにフォームデータに対してこれを行う方法をドラフトしました: https://github.com/KeejOow/Android-post-webview

2つのリポジトリの間で、答えを見つけることができるはずです:)

2

postUrl()メソッドを使用してフォームを送信する場合は、次のようにWebViewオブジェクトのpostUrlメソッドをオーバーライドできます。

 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);
2
Sathesh