suvord
@suvord
Разработчик на Lamp, GoLang, Delphi

Как выдернуть определенное значение из cookie по ключу из WebView в Xamarin для Android?

Добрый день!

Извиняюсь, возможно, за вопрос от джуна, так как в Xamarin не силен, и не получается найти что-то реально подходящее в поисковиках, метод научного тыка уже тоже перестал работать.

Набрасываю небольшое приложение, которое будет работать с корпоративной простенькой CRM через WebView. Для вывода уведомления о выдаче новой задачи нужно выдернуть значение сессии из куков. CookieManager в MS VS 2019 отсутствует. Получается, нужно использовать нативные CookieContainer и CookieCollection.

Например, разрабатываем такой метод:
public async void CheckCookie(string url) {
var uri = new Uri(url);
var cookies = new CookieContainer();
cookies = Webview.Cookies;
var cookie = cookies.GetCookies(uri);
// и так далее
}


B итоге получаем ошибку.

Буду рад любой подсказке.
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 1
@5465
В Xamarin.Android вы можете использовать нативные классы CookieContainer и CookieCollection из пространства имен System.Net.

Для того чтобы получить CookieCollection из WebView вы можете использовать следующий код:

// Получаем экземпляр класса CookieManager
var cookieManager = Android.Webkit.CookieManager.Instance;
// Получаем все куки
var cookieString = cookieManager.GetCookie(url);
// Создаем новый экземпляр CookieContainer
var cookieContainer = new CookieContainer();
// Парсим куки и добавляем их в CookieContainer
var cookies = cookieString.Split(';');
foreach (var cookie in cookies)
{
    cookieContainer.SetCookies(new Uri(url), cookie);
}
// Получаем CookieCollection
var cookieCollection = cookieContainer.GetCookies(new Uri(url));


Здесь мы используем метод GetCookie из CookieManager для получения куков в виде строки. Затем мы создаем новый экземпляр CookieContainer, разбиваем строку с помощью Split и добавляем каждую куку в CookieContainer. И наконец, мы получаем CookieCollection с помощью метода GetCookies у CookieContainer.

Теперь вы можете получить значение куки по ключу, используя следующий код:

var cookie = cookieCollection["key"];
var cookieValue = cookie?.Value;


Где "key" - это имя куки, значение которой вы хотите получить. Обратите внимание, что значение куки может быть null, если такой куки не существует.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы