Как перехватить данные 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
Я думаю, вы можете использовать shouldInterceptRequest(WebView view, String url)
метод WebViewClient, но он поддерживается в API позже 11.