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

У меня есть приложение для 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> 

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

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

Solutions Collecting From Web of "Как перехватывать данные POST в веб-обозревателе Android"

Если вы знакомы с JavaScript, я бы предложил вам использовать JavaScript. Я думаю, что это более удобно и легко. В этом туре рассказывается, как использовать 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 (String url, byte [] postData) , но, к сожалению, это не сработало для меня.

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

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

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

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

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