我需要为来自WebView的每个请求添加自定义标头.我知道loadURL有参数extraHeaders,但这些只适用于初始请求.所有后续请求都不包含标头.我查看了所有覆盖内容WebViewClient,但没有任何内容允许向资源请求添加标头 - onLoadResource(WebView view, String url).任何帮助都会很精彩.
谢谢,雷
我正在使用shouldInterceptRequest拦截来自webview的请求
下面是我返回WebResourceResponse的代码
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static WebResourceResponse handleRequestViaUrlOnly(WebResourceRequest webResourceRequest){
String url = webResourceRequest.getUrl().toString();
Log.i("intercepting req....!!!", url);
String ext = MimeTypeMap.getFileExtensionFromUrl(url);
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);
try {
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestProperty("Sample-Header", "hello");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
return new WebResourceResponse(mime, "UTF-8", conn.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我在CustomWebViewClient中调用此方法
class CustomWebViewClient extends WebViewClient {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
return handleRequestViaUrlOnly(request);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在chrome:// inspect /#devices中检查来自WebView远程调试器的请求标头时.
我添加的附加RequestProperty不存在.
conn.setRequestProperty("Sample-Header", "hello");
Run Code Online (Sandbox Code Playgroud)
WebView中的请求标头中不存在Sample-Header.
我错过了什么吗?我会感激任何帮助.