管理饼干在WPF的网页浏览器控制?
-
21-09-2019 - |
题
有没有一种方法读写的饼干这个的网页浏览器控制用途?
我做这样的事情...
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);
解决方案
web浏览器控件使用的WinInet用于联网,专门使用InternetSetCookie(实施例)和InternetGetCookie(实施例)功能的Cookie管理。没有一个WinInet的包装在.NET中,但可以对调用。
其他提示
一个关于WebBrowser
控制和饼干的潜在混乱的事情是,乍一看,它通常的外观的喜欢你的应用程序获得一个单独的cookie存储。例如,如果您登录到一个网站,存储持久cookie识别您的身份,那么你是否会出现在中记录从主机控制将是独立的,你是否似乎是在通过IE浏览器登录一个应用程序内部的网站
在实际上,可以甚至可以与不同的身份登录
不过,虽然这可能是自然地得出结论,每个应用程序托管WebBrowser
因此得到它自己的cookies,其实这是不正确的。这里仅仅是两套饼干:在“低诚信”模式所使用的那些(这是IE浏览器默认情况下运行),而另一组,这是什么,你会在一个正常的应用程序获取主机WebBrowser
也如果你运行IE升高,你会得到什么。
是的,你说得对,InternetGetCookieEx是检索的HttpOnly饼干的唯一途径,它是从WebBrowser控件抢饼干的首选方式。
我贴完整的例子此处
你可以使用 应用程序。GetCookie 和 应用程序。SetCookie 方法。
虽然应用程序或多或少相关WPF,可以使用这些方法中任何的桌面上。净码。事实上,它们是包装纸上 InternetGetCookieEx 和 InternetSetCookieEx Windows Api。
我面临着同样的问题,前几天。 除上述答案的例子,这里是一个Win32包装WebBrowser控件。这种实现的优点是,它暴露更多选项的默认web浏览器控件。
不幸的是,如果这不是WPF本地人,所以你必须创建一个包装,如果你打算在WPF中使用它。