开发者

How to intercept POST data in an android webview

开发者 https://www.devze.com 2023-04-09 05:23 出处:网络
I have an android app that consists of a webview. It needs to allow users to fill in a form on a webpage and then change the data of the form after the user has clicke开发者_运维问答d submit on the fo

I have an android app that consists of a webview. It needs to allow users to fill in a form on a webpage and then change the data of the form after the user has clicke开发者_运维问答d submit on the form. The form will use the POST request method.

So my question is, how can I intercept the POST data from the form, change it's values, then send it along?

For example: If there's a web form like this...

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

If the user enters name = Steve and email = steve@steve.com in the form, I want to change the values to name = bob and email = bob@bob.com in the android app and have the new POST be sent to http://www.example.com/do.php.

Thanks for your help!


If you are familiar with JavaScript, I would suggest you use JavaScript. I think it's more convenient and easy. This tour tells you how to use JavaScript in a WebView.


I wrote a library with a special WebViewClient that offers a modified shouldOverrideUrlLoading where you can have access to post data.

https://github.com/KonstantinSchubert/request_data_webviewclient

Unfortunately, my implementation works for XMLHttpRequest (AJAX) requests only. But somebody else drafted already how this would be done for form data: https://github.com/KeejOow/android-post-webview

Between the two repositories, you should be able to find your answer :)


if you are submitting the form using postUrl() method then you can override the postUrl method in your WebView object like this.

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


I liked the suggestion for public void postUrl(String url, byte[] postData) , but unfortunately it did not work for me.

My solution for just intercepting the POST request:

  • have a WebViewClient subclass that is set for WebView
  • override public void onPageStarted(WebView view, String url, Bitmap favicon) to examine the request data and act accordingly (as per requirements)

Code excerpt & additional thoughts here: https://stackoverflow.com/a/9493323/2162226


overriding onPageStarted callback in your WebView


I think you can use shouldInterceptRequest(WebView view, String url) method of WebViewClient, but it is supported in the API's later than 11.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号