【发布时间】:2017-01-23 12:59:42
【问题描述】:
我目前在 webview 中拦截请求的代码是
@Override
public WebResourceResponse shouldInterceptRequest(WebView view,
String url) {
String ext = MimeTypeMap.getFileExtensionFromUrl(url);
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);
if (mime == null) {
return super.shouldInterceptRequest(view, url);
} else {
HttpURLConnection conn = (HttpURLConnection) new URL(
url).openConnection();
conn.setRequestProperty("User-Agent", userAgent);
return new WebResourceResponse(mime, "UTF-8",
conn.getInputStream());
}
}
我从 The best way to intercept a WebView request in Android.
但是,每当我尝试执行身份验证时,假设我正在我的 web 视图中加载 facebook。
mWebView.loadUrl("https://www.facebook.com/");
什么都没有发生,我注意到的是,请求标头和响应都不完整。此外,来源中没有 cookie。 (我在通过 Chrome 远程调试 webview 时看到了这一点。
如果我错了,请纠正我,但我认为不完整的标头和丢失的 cookie 是导致登录请求失败的原因。
有没有办法可以修改请求并设置其标头?也为了回应,我也应该这样做吗?最后,我怎样才能拥有 cookie。
【问题讨论】:
-
恕我直言,您不需要这种重型火炮来覆盖用户代理。见Set/Change changing the WebView user agent in Android