Sha*_*Jha 4 android response webview
当我向服务器发布一些 url 时,我试图在 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);
}
Run Code Online (Sandbox Code Playgroud)
此方法返回 WebResourceResponse 对象。但是我不知道如何从中获取响应标头。
默认return super.shouldInterceptRequest(view, request);返回空值。
那么,应该怎么做才能捕获实际的 webview 响应。
小智 6
试试这个代码(需要 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
}
}
Run Code Online (Sandbox Code Playgroud)
https://artemzin.com/blog/use-okhttp-to-load-resources-for-webview/
| 归档时间: |
|
| 查看次数: |
10098 次 |
| 最近记录: |