如何拦截android webview中的POST数据

我有一个由webview组成的Android应用程序。 它需要允许用户在网页上填写表单,然后在用户单击submit上的submit后更改表单的数据。 表单将使用POST请求方法。

所以我的问题是, 我如何拦截表单中的POST数据,更改它的值,然后发送它?

例如:如果有这样的Web表单……

 

如果用户在表单中输入name = Steve和email = steve@steve.com,我想在Android应用程序中将值更改为name = bob和email = bob@bob.com并将新POST发送到http://www.example.com/do.php

谢谢你的帮助!

如果您熟悉JavaScript,我建议您使用JavaScript。 我认为它更方便,更容易。 本导览将介绍如何在WebView中使用JavaScript。

如果您使用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); 

我编写了一个带有特殊WebViewClient的库,它提供了一个修改过的shouldOverrideUrlLoading ,您可以在其中访问发布数据。

https://github.com/KonstantinSchubert/request_data_webviewclient

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

在两个存储库之间,你应该能够find你的答案:)

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

我的拦截POST请求的解决方案

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

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

覆盖WebView onPageStarted回调

我认为你可以使用shouldInterceptRequest(WebView view, String url)方法,但它在11以后的API中受支持。