Как перехватить данные POST в android webview

у меня есть приложение для android, которое состоит из webview. Он должен позволить пользователям заполнить форму на веб-странице, а затем изменить данные формы после нажатия пользователем submit на форме. Форма будет использовать метод POST request.

Итак, мой вопрос:как я могу перехватить данные POST из формы, изменить его значения, а затем отправить его вместе?

например: если есть веб-форма такой...

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

если пользователь вводит имя = Стив и электронная почта = steve@steve.com в форме я хочу изменить значения на name = bob и email = bob@bob.com в приложении для android и новый пост будет отправлен в http://www.example.com/do.php.

Спасибо за вашу помощь!

6 ответов


Если вы знакомы с JavaScript, я бы предложил вам использовать JavaScript. Думаю, это удобнее и проще. этой tour расскажет вам, как использовать JavaScript в WebView.


Если вы отправляете форму с помощью метода postUrl (), вы можете переопределить метод postUrl в своем объекте WebView следующим образом.

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

Я написал библиотеку со специальным WebViewClient, который предлагает измененный shouldOverrideUrlLoading где вы можете иметь доступ к данным post.

https://github.com/KonstantinSchubert/request_data_webviewclient

к сожалению, моя реализация работает только для запросов XMLHttpRequest (AJAX). Но кто-то уже набросал, как это будет сделано для данных формы:https://github.com/KeejOow/android-post-webview

между двумя репозитории, вы должны иметь возможность найти свой ответ:)


Мне понравилось предложение public void postUrl (строка url, байт[] postData) , но, к сожалению, это не работает для меня.

мое решение для просто перехват запроса POST:

  • есть подкласс WebViewClient, который установлен для WebView
  • переопределить public void onPageStarted (WebView view, String url, Bitmap favicon) изучить данные запроса и действовать соответственно (согласно требования)

выдержка кода и дополнительные мысли здесь:https://stackoverflow.com/a/9493323/2162226


переопределение onPageStarted обратный вызов в WebView


Я думаю, вы можете использовать shouldInterceptRequest(WebView view, String url) метод WebViewClient, но он поддерживается в API позже 11.