Подтвердить что ты не робот

Установите cookie для webView в 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, и я понятия не имею, как это сделать. Любые предложения или решения?

4b9b3361

Ответ 2

Это очень просто.

String cookieString = "cookie_name=cookie_value; path=/";
CookieManager.getInstance().setCookie(baseUrl, cookieString);

где cookieString отформатирован так же, как более традиционный заголовок HTTP Set-Cookie, а baseUrl - это сайт, к которому должен принадлежать файл cookie.

Ответ 3

Просто хочу по-другому сделать так, как это можно сделать. Не сказать, что это лучшее, но это способ. Вы можете использовать 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. Если кто-нибудь знает, как это исправить, прокомментируйте.