如何在Android WebView请求上查看请求头?

如何在Android WebView请求上查看请求头?,android,webview,Android,Webview,我如何拦截所有来自AndroidWebView的请求并获取相应的请求头?我想查看从我的WebView发出的每个请求的标题,包括xhr、脚本源、css等 iOS上的等效功能是覆盖NSURLCache,它将为您提供所有这些信息。以下内容可能与我想要的内容最接近,但据我所知,WebViewClient只返回字符串: void onLoadResource(WebView view, String url); WebResourceResponse shouldInterceptRequest(WebV

我如何拦截所有来自Android
WebView
的请求并获取相应的请求头?我想查看从我的
WebView
发出的每个请求的标题,包括xhr、脚本源、css等

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

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

您的问题听起来非常类似,因此立即明确的回答是,无法在Android的WebView或WebViewClient上读取请求标题


然而,有一些变通办法可以让你得到你需要的东西。详细介绍了如何执行此操作。

通过您可以启用对web view应用程序的调试,并使用Chrome Developer工具查看您的请求、响应、css、javascripts等的完整详细信息。

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

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

                return null;
            }
        });
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;
            }

});
首先,我尝试为
myWebView
设置自定义
WebViewClient

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

});

希望它能帮助一些人。

使用Android的
WebView
WebViewClient
,afaik无法读取请求标题。我使用一个轻量级代理解决了这个问题。@acj-您是在
WebView
或外部(路由器/网络级别)上以编程方式执行代理的吗?我在“设备设置”中的“移动网络”中配置它。另一个选项:如果我只需要一个快速且脏的方法来检查标题,我将启动netcat的一个实例(
nc
)在我的笔记本电脑上,将
WebView
连接到netcat实例。如果我理解正确,如果我需要在用户的常规运行期间获取这些头文件,则这两种解决方案都不适合生产部署,对吗?正确。对于常规运行,可以使用reflection()以编程方式配置代理,但任何此类方法都是脆弱的,不受支持的。我尝试了安东·普罗科波夫(Anton Prokopov)下面的建议,成功地打印了标题。远程调试用于在远程设备上调试Chrome,不适用于WebView