Вопрос

Есть ли способ прочитать / записать файлы cookie, которые использует веб-браузерный элемент управления?

Я делаю что-то вроде этого...

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);  
Это было полезно?

Решение

элемент управления webbrowser использует WinInet для работы в сети, в частности, использует функции InternetSetCookie (Ex) и InternetGetCookie (Ex) для управления файлами cookie.В .Net нет оболочки WinInet, но вы можете p-вызывать.

Другие советы

Одна из потенциально сбивающих с толку вещей, связанных с WebBrowser контроль и файлы cookie заключаются в том, что на первый взгляд это часто выглядит например, ваше приложение получает отдельное хранилище файлов cookie.Например, если вы заходите на сайт, который хранит постоянный файл cookie для вашей идентификации, то то, похоже ли, что вы вошли на этот сайт из приложения, на котором размещен элемент управления, не зависит от того, входите ли вы в систему через Internet Explorer.

На самом деле, вы даже можете войти в систему под разными удостоверениями.

Однако, хотя было бы естественно сделать вывод, что каждое приложение, размещающее WebBrowser следовательно, получает свои собственные файлы cookie, на самом деле это неправда.Существует всего два набора файлов cookie:те, которые используются в режиме "низкой целостности" (в котором по умолчанию работает IE), и другой набор, который вы получите в обычном приложении, в котором размещен WebBrowser а также то, что вы получите, если запустите IE с повышенными правами.

Да, вы правы, InternetGetCookieEx - это единственный способ получить файлы cookie HttpOnly, и это предпочтительный способ получить файлы cookie из WebBrowser control.

Я опубликовал полный пример здесь

Вы можете использовать Приложение.getCookie и Приложение.SetCookie методы.

Хотя приложение более или менее связано с WPF, вы можете использовать эти методы на любом рабочем столе .СЕТЕВОЙ код.На самом деле, это обертки на Интернетгеткукиекс и Интернетсеть cookieex API-интерфейсы Windows.

Я столкнулся с такой же проблемой несколько дней назад.Помимо примеров из предыдущих ответов, здесь представлена оболочка Win32 для элемента управления WebBrowser.Преимущество этой реализации заключается в том, что она предоставляет больше опций, которыми управляет веб-браузер по умолчанию.

К сожалению, если это не WPF native, вам придется создать оболочку, если вы планируете использовать ее в WPF.

http://code.google.com/p/csexwb2/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top