Подтвердить что ты не робот

Как перехватывать данные POST в веб-обозревателе Android

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

Итак, мой вопрос: как я могу перехватить данные 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 и email = [email protected] в форме, я хочу изменить значения name = bob и email = [email protected] в приложении Android и получить новый POST отправлено на http://www.example.com/do.php.

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

4b9b3361

Ответ 1

Если вы знакомы с JavaScript, я бы предложил вам использовать JavaScript. Я думаю, что это более удобно и легко. Этот тур рассказывает вам, как использовать JavaScript в WebView.

Ответ 2

если вы отправляете форму с помощью метода 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);

Ответ 3

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

https://github.com/KonstantinSchubert/request_data_webviewclient

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

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

Ответ 4

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

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

  • имеет подкласс WebViewClient, который установлен для WebView
  • переопределить public void onPageStarted (представление WebView, строковый URL-адрес, растровый значок), чтобы проверить данные запроса и действовать соответственно (согласно требованиям)

Выдержка из кода и дополнительные мысли здесь: fooobar.com/questions/224696/...

Ответ 5

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

Ответ 6

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