1.拦截post的请求在其中添加请求头。
在WebViewClient()中使用shouldInterceptRequest方法进行拦截;注意在api21以下使用
public WebResourceResponse shouldInterceptRequest(WebView view, String url){};api21以上public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request){}。目前比较方便的在public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)中进行拦截,因为request中提供了判断了请求方式的方法以及获取请求头的方法。虽然可以添加请求但是无法获取请求体部分(官方没有提供获取请求体的方法),抓包时发现没有请求体。
在api21以下只提供地址无法判断是post还是get请求。有谁有好的方法麻烦告知以下。
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Nullable
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if (request.getMethod().equalsIgnoreCase("post")){
URL url= null;
try {
LogUtil.i("11111111111=====request.getUrl().toString()==="+request.getUrl().toString());
url = new URL(request.getUrl().toString());
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
Map<String, String> requestHeaders = request.getRequestHeaders();
for (Map.Entry<String, String> entry : requestHeaders.entrySet()) {
connection.setRequestProperty(entry.getKey(), entry.getValue());
}
String version = APKUtil.getVerName(TaskCenterActivity.this);
int systemVersion = APKUtil.getSystemVersion();
connection.setRequestProperty("Authorization", MyApplication.getAppUser().getAccess_token());
connection.setRequestProperty("Bp-Channel","Android/" + version + "/" + systemVersion);
// String params = "\nBp-Channel:" + "Android/" + version + "/" + systemVersion + "\nAuthorization:" + MyApplication.getAppUser().getAccess_token();
// DataOutputStream os=new DataOutputStream(connection.getOutputStream());
// os.writeBytes(params);
return new WebResourceResponse("text/html", connection.getContentEncoding(), connection.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
return super.shouldInterceptRequest(view,request);
}
网友评论