在我的Android应用程序中,我连接到一个安全站点,我的登录凭据包含在自定义标头中。我能够成功登录,因为自定义标头随新页面请求一起发送。 根据我的自定义标头信息,我的设备启用了特定的页面功能。问题是当我在登录后从主页加载资源时,我在webview.LoadUrl()中指定了自定义标头。不发送。因此,最终结果是我可以登录但不会收到与我的设备关联的特殊功能。
我已尝试过这两种覆盖。更改URL时,shouldOverrideUrlLoading似乎有效,但似乎没有在资源请求中调用shouldInterceptRequest?如果是我的实现不起作用?
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
request.getRequestHeaders().putAll(getExtraHeaders());
return super.shouldInterceptRequest(view, request);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url, getExtraHeaders());
return false;
}
答案 0 :(得分:0)
看看这对你来说是否更好:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.post(new Runnable() {
@Override
public void run() {
view.loadUrl(url, getExtraHeaders());
}
});
// true means: yes, we are overriding the loading of this url
return true;
}
这个附加代码只是一个建议/大纲,不应被视为剪切/粘贴就绪代码
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
String mimetype;
String encoding;
Map<String, String> headers = new HashMap<>();
headers.putAll(request.getRequestHeaders());
headers.putAll(getExtraHeaders());
URL url = request.getUrl().toString();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
for (String key : headers.keySet()) {
conn.setRequestProperty(k, headers.get(k));
// TODO look for the mimetype and encoding header information and set mimetype and encoding
}
return new WebResourceResponse(mimetype, encoding, conn.getInputStream());
// return null here if you decide to let the webview load the resource
}