获取webbrowser cookie登录

我正在创建一个Windows窗体应用程序,我有一个webbrowser control

用户使用webbrowser登录后,我想使用与Microsoft.Http.HttpClientHttpWebRequest相同的帐户登录,它应该类似于PHP cURL

问题是网页只允许每个帐户进行单点登录,如果我使用HttpClient签名,它会将webbrowser踢出去。

我想知道的,如果有可能劫持webbrowser会话或获取cookies并在我的HttpClient或类似的api使用它。

我可以使用webbrowser.Cookie获取一些数据,但是如何将其推送到HttpClient

这样的事情是否可能,我可以拿走cookie并使用相同的会话? 如果是这样,怎么样?

从这里获得帮助:

是否可以将身份validation从Webbrowser转移到WebRequest

Alkampfer发布了解决方案。 这正是我所需要的,也是有效的。

此解决方案还Http only cookie。

您可以调用GetUriCookieContainer方法,该方法返回一个CookieContainer,该方法可用于随后使用WebRequest对象进行调用。

 [DllImport("wininet.dll", SetLastError = true)] public static extern bool InternetGetCookieEx( string url, string cookieName, StringBuilder cookieData, ref int size, Int32 dwFlags, IntPtr lpReserved); private const Int32 InternetCookieHttponly = 0x2000; ///  /// Gets the URI cookie container. ///  /// The URI. ///  public static CookieContainer GetUriCookieContainer(Uri uri) { CookieContainer cookies = null; // Determine the size of the cookie int datasize = 8192 * 16; StringBuilder cookieData = new StringBuilder(datasize); if (!InternetGetCookieEx(uri.ToString(), null, cookieData, ref datasize, InternetCookieHttponly, IntPtr.Zero)) { if (datasize < 0) return null; // Allocate stringbuilder large enough to hold the cookie cookieData = new StringBuilder(datasize); if (!InternetGetCookieEx( uri.ToString(), null, cookieData, ref datasize, InternetCookieHttponly, IntPtr.Zero)) return null; } if (cookieData.Length > 0) { cookies = new CookieContainer(); cookies.SetCookies(uri, cookieData.ToString().Replace(';', ',')); } return cookies; } 

你可以,但这有点棘手。 使用InternetSetCookie调用以及来自HttpWebRequest的CookieContainer。

这是方法: http : //msdn.microsoft.com/en-us/library/windows/desktop/aa385107(v = vs。85).aspx

以下是如何设置它的示例: http : //social.msdn.microsoft.com/Forums/en-SG/csharpgeneral/thread/76a38eee-3ef6-4993-a54d-3fecc4eb6cff

我想你可能会把技术拉得太过分了。 Windows窗体中的webbrowser控件通常用于为您提供本地文件或Internet的基本html呈现,但不应用于替换完整的Web浏览器。

如果要对SSO提供程序进行身份validation,则必须使用正确的库(在本例中为Windows Identitity Foundation)和Microsoft.IdentityModel,您将获得声明身份validation机制来处理来自SSO提供程序的声明。 Cookie不能在应用程序之间共享,事实上一些新的Web技术只是为了避免这种情况而设计,所以在我看来尝试使用WIF而不是webbrowser控件。

希望能帮助到你,

我是这样做的

 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(address); var cookies = new CookieContainer(); cookies.SetCookies(webBrowser.Document.Url, webBrowser.Document.Cookie.Replace(';', ',')); req.CookieContainer = cookies;