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