使用2个WebBrowser控件并在C#中处理HTTPONLY cookie

时间:2013-06-11 15:01:27

标签: c# cookies httpwebrequest webbrowser-control

在我的应用程序中,我必须使用WebBrowser Control登录,然后使用HttpWebRequest访问网站,为实现此目的,我必须将Cookie从WebBrowser控件转移到CookieContainer HttpWebRequest。我正在使用以下代码来实现这一目标。

this._cookieContainer.SetCookies(uri,GetGlobalCookies(uri));

这里

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref uint pcchCookieData, int dwFlags, IntPtr lpReserved);
const int INTERNET_COOKIE_HTTPONLY = 0x00002000;

public static string GetGlobalCookies(string uri)
{
    uint datasize = 1024;
    StringBuilder cookieData = new StringBuilder((int)datasize);
    if (InternetGetCookieEx(uri, null, cookieData, ref datasize, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero)
        && cookieData.Length > 0)
    {
        return cookieData.ToString().Replace(';', ',');
    }
    else
    {
        return null;
    }
}

到目前为止,这段代码工作正常,但我尝试使用2 WebBrowser个控件登录同一个网站但不同的帐户,因为方法GetGlobalCookies(string uri)是静态的,它如何处理2 {{ 1}}不同的控制是我的问题吗?

实际上我在这里可以使用1 WebBrowser控件登录1个帐户,但之后如果我尝试使用其他WebBrowser控件登录到另一个帐户,它会自动重定向到第一个帐户。如何处理这个。

1 个答案:

答案 0 :(得分:0)

这里的实际问题是使用2个WebBrowser控件。因此,为了解决这个问题,我必须使用InternetSetCookieEx / InternetGetCookieEx API同步cookie,如this post中所述