我需要修改android webView请求的请求头。因此,我在方法 shouldInterceptRequest
中添加以下代码.
这是我的代码:
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
try {
String mUrl = request.getUrl().toString();
OkHttpClient httpClient = new OkHttpClient();
Request mRequest = new Request.Builder()
.url(request.getUrl().toString())
.addHeader("token", UserHelper.getToken()) //add headers
.build();
Response response = httpClient.newCall(mRequest).execute();
return new WebResourceResponse(
getMimeType(request.getUrl().toString()), // set content-type
response.header("content-encoding", "utf-8"),
response.body().byteStream()
);
} catch (Exception e) {
return super.shouldInterceptRequest(view, request);
}
return super.shouldInterceptRequest(view, request);
}
实际上,它有效,所有请求都带有新的 header 。但是,因为我构造了新的请求,所以原来的请求方法/正文丢失了。我不知道如何从 WebResourceRequest 中保留原始方法和正文。
最佳答案
WebResourceRequest 是一个无法读取请求正文的接口(interface),但是您可以使用自己的接口(interface),例如此 repo 剂量。
https://github.com/KonstantinSchubert/request_data_webviewclient
webView.setWebViewClient(new WriteHandlingWebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WriteHandlingWebResourceRequest request) {
// works the same as WebViewClient.shouldOverrideUrlLoading,
// but you have request.getAjaxData() which gives you the
// request body
}
});
关于android - 如何在android webView中获取WebResourceRequest的主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46481042/