如何拦截android webview中的POST数据

时间:2011-09-28 14:10:17

标签: android http post webview

我有一个包含webview的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,我想在android应用程序中将值更改为name = bob和email = bob@bob.com并将新的POST更改为已发送至http://www.example.com/do.php

感谢您的帮助!

6 个答案:

答案 0 :(得分:3)

如果您熟悉JavaScript,我建议您使用JavaScript。我认为它更方便,更容易。 This tour告诉您如何在WebView中使用JavaScript。

答案 1 :(得分:2)

如果您使用postUrl()方法提交表单,那么您可以像这样覆盖WebView对象中的postUrl方法。

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

答案 2 :(得分:1)

我写了一个带有特殊WebViewClient的库,它提供了一个修改后的shouldOverrideUrlLoading,您可以访问该帖子数据。

https://github.com/KonstantinSchubert/request_data_webviewclient

不幸的是,我的实现仅适用于XMLHttpRequest(AJAX)请求。但其他人已经起草了如何对表单数据执行此操作:https://github.com/KeejOow/android-post-webview

在两个存储库之间,您应该能够找到答案:)

答案 3 :(得分:-2)

我喜欢 public void postUrl(String url,byte [] postData)的建议,但遗憾的是它对我不起作用。

我的解决方案只是拦截了POST请求:

  • 有一个为WebView
  • 设置的WebViewClient子类
  • 覆盖 public void onPageStarted(WebView视图,String url,Bitmap favicon)以检查请求数据并采取相应措施(根据要求)

代码摘录&amp;其他想法:https://stackoverflow.com/a/9493323/2162226

答案 4 :(得分:-3)

覆盖onPageStarted

中的WebView回调

答案 5 :(得分:-5)

我认为您可以使用WebViewClient的shouldInterceptRequest(WebView view, String url)方法,但API的支持时间晚于11。