15

如何拦截所有来自 AndroidWebView的请求并获取相应的请求标头?我想查看从我的WebViewXHR、脚本源、css 等发出的每个请求的标头。

iOS 上的等价物是覆盖NSURLCache它将为您提供所有这些信息。以下可能是最接近我想要的,但据我所知,WebViewClient只给我们返回字符串:

void onLoadResource(WebView view, String url);
WebResourceResponse shouldInterceptRequest(WebView view, String url);
4

4 回答 4

15
webview.setWebViewClient(new WebViewClient() {
            @SuppressLint("NewApi")
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
                Log.d("", "request.getRequestHeaders()::"+request.getRequestHeaders());

                return null;
            }
        });
于 2017-03-28T12:36:34.033 回答
3

您的问题听起来与这个问题非常相似,因此直接且明确的答案是无法读取 Android 的 WebView 或 WebViewClient 上的请求标头

但是,有一些解决方法可以让您获得所需的东西。这个答案更详细地描述了如何做到这一点。

于 2013-11-02T00:33:08.710 回答
3

我在拦截请求标头时也遇到了一些问题WebView myWebView

首先,我尝试通过设置自定义来做到这WebViewClient一点myWebView

myWebView.setWebViewClient(new WebViewClient() {

    @Override
            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                Log.v("USERAGENTBROWSE", "shouldOverrideUrlLoading api >= 21 called");

                //some code

                return true;
            }

    @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.v("USERAGENTBROWSE", "shouldOverrideUrlLoading api < 21 called");

                //some code

                return true;
            }

});

但是方法shouldOverrideUrlLoading(...)从未被调用过。我真的不知道为什么。

然后我发现有办法截取一些常见的header,比如"User-Agent""Cache-Control"等:

myWebView.getSettings().setUserAgentString("your_custom_user_agent_header");
myWebView.getSettings().setCacheMode(int mode);
...

希望它可以帮助某人。

于 2018-02-22T08:46:57.523 回答
0

通过这种方式,您可以启用 Web 视图应用程序的调试,并使用 Chrome 开发人员工具查看您的请求、响应、css、javascripts 等的完整详细信息

于 2014-11-06T23:58:32.243 回答