Получить куки из веб-просмотра с путем и сроком годности
В настоящее время у меня есть веб-просмотр, который получает куки в onPageFinished
mWebview = (WebView) this.findViewById(R.id.myWebView);
mWebview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
String cookies = CookieManager.getInstance().getCookie(url);
Log.d("Cookie", cookies);
}
});
mWebview.loadUrl("http://www.google.com");
CookieManager.getCookie () возвращает только пары имени и значения файла cookie.
Теперь я хотел бы получить больше информации об этом файле cookie, например, путь и т.д.
Любая идея, как я могу извлечь все "необработанные данные" куки?
2 ответа
Вам необходимо переопределить загрузку ресурсов WebView, чтобы получить доступ к заголовкам ответов (файлы cookie отправляются в виде заголовков http). В зависимости от версии Android, которую вы поддерживаете, вам необходимо переопределить следующие два метода WebViewClient:
mWebview.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if (request != null && request.getUrl() != null && request.getMethod().equalsIgnoreCase("get")) {
String scheme = request.getUrl().getScheme().trim();
if (scheme.equalsIgnoreCase("http") || scheme.equalsIgnoreCase("https")) {
return executeRequest(request.getUrl().toString());
}
}
return null;
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
if (url != null) {
return executeRequest(url);
}
return null;
}
});
Затем вы можете извлечь содержимое URL-адреса самостоятельно и передать его в WebView (создав новый WebResourceResponse) или вернуть значение null и позволить WebView его обработать (учитывая, что это делает еще один вызов сети!)
private WebResourceResponse executeRequest(String url) {
try {
URLConnection connection = new URL(url).openConnection();
String cookie = connection.getHeaderField("Set-Cookie");
if(cookie != null) {
Log.d("Cookie", cookie);
}
return null;
//return new WebResourceResponse(connection.getContentType(), connection.getHeaderField("encoding"), connection.getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Попробуй это:
String[] x = Pattern.compile(";").split(CookieManager.getInstance().getCookie());