NSHttpCookie получает куки в случае iOS версии 10 - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу реализовать функцию загрузки PDF-документа с помощью WebClient в Xamain iOS. В настоящее время он отлично работает для iOS 11, где я получаю куки, используя HttpCookieStore. Для iOS 10 я не смог получить куки.

Поток для работы над этим 1. Получение файлов cookie 2. Создание запроса сервера веб-клиента с добавлением файлов cookie в заголовок.

для iOS 11, Ниже приведен синтаксис для получения файлов cookie:

NSHttpCookie[] cookieStoreData;

    if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
            {
                var cookieStore = webView.Configuration.WebsiteDataStore.HttpCookieStore;
                cookieStoreData = await cookieStore.GetAllCookiesAsync();
            }

Для iOS 10,

cookieStoreData = NSHttpCookieStorage.SharedStorage.Cookies;  

Он не возвращает куки в этом сценарии, поэтому следующий вызов веб-клиента на сервер завершится неудачно (в случае iOS 10).

StringBuilder cookies = new StringBuilder();
var webClient = new WebClient ();

foreach (var temp in cookieStoreData)
{
  cookies.Append(temp.Name + "=" + temp.Value + ";");
}  

webClient.Headers.Add(HttpRequestHeader.Cookie, cookies.ToString()); 



webClient.DownloadDataAsync (webView.Url);
webClient.DownloadDataCompleted += (s, e) => {
if (e.Error == null)
{
    // Downloading data......
}
else 
{
    Console.WriteLine("URL for page : " + e.Error.GetType());
    Console.WriteLine("URL for page : " + e.Error);
    new UIAlertView("Done", "Download Failed. Please try again.", null, "OK", null).Show();
}

1 Ответ

0 голосов
/ 07 ноября 2018

Причина:

  1. NSHTTPCookieStorage не является надежным, потому что WKWebView выполняет все свои сеть в отдельном процессе, так что вы не можете получить на NSHTTPCookieStorage объект, используемый веб-представлением.
  2. JavaScript (например, WKUserScript ) не просмотреть файлы cookie с тегами HttpOnly.
  3. WKWebsiteDataStore позволяет узнать о существовании файла cookie, но не позволяет вам получить содержимое.
  4. Подход делегата, который вы показали, не увидит все куки, потому что не все ответы являются навигационными.

Решение: Лучшее решение - использовать UIWebview вместо WKWebView. Для более подробной информации вы можете получить доступ к здесь .

...