当我将一些网址发布到服务器时,我正试图在webview中获取响应标头。我正在使用shouldInterceptRequest方法。
@Override
public WebResourceResponse shouldInterceptRequest(final WebView view, final WebResourceRequest request) {
if(request.getUrl().toString().contains(SMConstant.INTERCEPTED_URL)){
if(interceptFlag==0){
((Activity) mContext).runOnUiThread(new Runnable(){
@Override
public void run() {
view.postUrl(request.getUrl().toString(), EncodingUtils.getBytes(postData, "UTF-8"));
}
});
interceptFlag++;
}
}
return super.shouldInterceptRequest(view, request);
}
此方法返回WebResourceResponse对象。但我不知道如何从中获取响应标头。
默认情况下,return super.shouldInterceptRequest(view, request);
返回null。
所以,应该做些什么,以便捕获实际的webview响应。
答案 0 :(得分:3)
尝试此代码(需要API VERSION 21):
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if (request.getUrl().toString().contains("some_char")) {// condition to intercept webview's request
return handleIntercept(request);
} else
return super.shouldInterceptRequest(view, request);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private WebResourceResponse handleIntercept(WebResourceRequest request){
OkHttpClient okHttpClient = new OkHttpClient();
final Call call = okHttpClient.newCall(new Request.Builder()
.url(request.getUrl().toString())
.method(request.getMethod(),null)
.headers(Headers.of(request.getRequestHeaders()))
.build()
);
try {
final Response response = call.execute();
response.headers();// get response header here
return new WebResourceResponse(
response.header("content-type", "text/plain"), // You can set something other as default content-type
response.header("content-encoding", "utf-8"), //you can set another encoding as default
response.body().byteStream()
);
} catch (IOException e) {
e.printStackTrace();
return null
}
}
参考: Access the http response headers in a WebView?
https://artemzin.com/blog/use-okhttp-to-load-resources-for-webview/