Ответ 1
Вероятно, вы захотите взглянуть на это решение: Проблема с Android Cookie Android
Я получаю HttpResponse
с сервера, проверяя правильность имени пользователя или пароля.
Когда я загружаю url
в webview
, я хочу, чтобы webview
имел файл cookie (ответ, который я получаю с postData()
, хранящийся в webview
.
Я хочу, чтобы webView загружал файл cookie и загружал URL-адрес с этим файлом cookie, хранящимся в веб-просмотре.
Я получаю ответ.
public HttpResponse postData() {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://example.com/login.aspx");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("txtUsername", "user"));
nameValuePairs.add(new BasicNameValuePair("txtPassword", "123"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
String responseAsText = EntityUtils.toString(response.getEntity());
Log.v(TAG , "Response from req: " + responseAsText);
return responseAsText;
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
return null;
}
И я загружаюUrl:
webView.loadUrl("http://a_page.com/getpage.aspx?p=home");
Я думаю, что я не управляю файлом cookie, и я понятия не имею, как это сделать. Любые предложения или решения?
Вероятно, вы захотите взглянуть на это решение: Проблема с Android Cookie Android
Это очень просто.
String cookieString = "cookie_name=cookie_value; path=/";
CookieManager.getInstance().setCookie(baseUrl, cookieString);
где cookieString
отформатирован так же, как более традиционный заголовок HTTP Set-Cookie
, а baseUrl
- это сайт, к которому должен принадлежать файл cookie.
Просто хочу по-другому сделать так, как это можно сделать. Не сказать, что это лучшее, но это способ. Вы можете использовать JavaScript для настройки файлов cookie. Просто переопределите onPageFinished
в WebViewClient
new WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
val javascript = """document.cookie = "key=$value""""
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
view.evaluateJavascript(javascript) { s -> Timber.d("Inject: %s", s) }
} else {
view.loadUrl("javascript:" + javascript, null)
}
}
}
Одна вещь с таким подходом: вам придется перезагрузить webView. Если кто-нибудь знает, как это исправить, прокомментируйте.