Управление файлами cookie в элементе управления WPF WebBrowser?
есть ли способ чтения / записи файлов cookie, которые использует элемент управления WebBrowser?
Я делаю что-то вроде этого...
string resultHtml;
HttpWebRequest request = CreateMyHttpWebRequest(); // fills http headers and stuff
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
resultHtml = sr.ReadToEnd();
}
WebBrowser browser = new WebBrowser();
browser.CookieContainer = request.CookieContainer; // i wish i could do this :(
browser.NavigateToString(resultHtml);
5 ответов
элемент управления webbrowser использует WinInet для работы в сети, в частности функции InternetSetCookie(Ex) и InternetGetCookie(Ex) для управления файлами Cookie. В .Net нет оболочки WinInet, но вы можете P-вызвать.
одна из потенциально запутанных вещей о WebBrowser
контроль и cookies-это то, что на первый взгляд часто выглядит как ваше приложение получает отдельный магазин cookie. Например, если вы входите на сайт, на котором хранится постоянный файл cookie, чтобы идентифицировать вас, то независимо от того, входите ли вы на этот сайт из приложения, на котором размещен элемент управления, не зависит от того, входите ли вы в систему через Internet Explorer.
на самом деле, вы даже можете быть зарегистрированы с разными личностями.
однако, хотя это может быть естественным, чтобы сделать вывод, что каждое приложение хостинга получает собственные куки, на самом деле это не так. Есть только два набора файлов cookie: те, которые используются в режиме "низкой целостности" (это то, что IE работает по умолчанию), и другой набор, который вы получите в обычном приложении, в котором размещается WebBrowser
а также то, что вы получите, если запустите IE повышенным.
Да, вы правы, InternetGetCookieEx-единственный способ получить файлы cookie HttpOnly, и это предпочтительный способ захватить cookie из элемента управления WebBrowser.
Я написал полный пример здесь
можно использовать приложение.GetCookie и приложение.Cookie посредством setcookie методы.
хотя приложение более или менее связано с WPF, вы можете использовать эти методы в любом настольном коде .NET. На самом деле, они обертки на InternetGetCookieEx и InternetSetCookieEx API Windows.
Я столкнулась с той же проблемой несколько дней назад. Помимо примеров предыдущих ответов, вот оболочка Win32 для элемента управления WebBrowser. Преимущество этой реализации заключается в том, что она предоставляет больше опций, чем элемент управления WebBrowser по умолчанию.
к сожалению, если это не WPF native, поэтому вам придется создать оболочку, если вы планируете использовать ее в WPF.