Как перехватить POST-данные в веб-просмотре Android - PullRequest
25 голосов
/ 28 сентября 2011

У меня есть приложение для Android, которое состоит из веб-просмотра. Он должен позволять пользователям заполнять форму на веб-странице, а затем изменять данные формы после того, как пользователь нажал 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>

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

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

Ответы [ 6 ]

3 голосов
/ 13 марта 2013

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

2 голосов
/ 13 августа 2017

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

https://github.com/KonstantinSchubert/request_data_webviewclient

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

Между двумя хранилищами вы сможете найти свой ответ:)

2 голосов
/ 11 марта 2013

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

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

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

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

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

0 голосов
/ 05 марта 2013

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

0 голосов
/ 28 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...