在WebBrowser控件中设置cookie

时间:2010-05-13 21:55:52

标签: c# .net browser webbrowser-control

我正在使用WebBrowser的Navigate功能加载网站,我希望浏览器使用我提供的cookie加载页面。

以下代码不起作用:

wb.Navigate(url, null, null, "Cookie: " + cookie + "\n");

我做错了什么?我必须使用InternetSetCookie吗?这似乎不是最佳解决方案。

3 个答案:

答案 0 :(得分:20)

看起来有更好的方法:

导入InternetSetCookie功能:

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetSetCookie(string lpszUrlName, string lpszCookieName, string lpszCookieData);

创建Cookie对象:

Cookie temp1 = new Cookie("KEY1", "VALUE1", "/Path/To/My/App", "/");

调用InternetSetCookie函数设置该网址的Cookie

InternetSetCookie("https://my.url.com/Path/To/My/App", null, temp1.ToString() + "; expires = Sun, 01-Jan-2013 00:00:00 GMT");

Navigate WebBrowser到您要访问的网址。

webBrowser1.Navigate("https://my.url.com/Path/To/My/App");

认为这是该问题的最佳解决方案:)。

答案 1 :(得分:3)

The proper way is using InternetSetCookieEx.

[DllImport("wininet.dll")]
static extern InternetCookieState InternetSetCookieEx(
    string lpszURL,
    string lpszCookieName,
    string lpszCookieData,
    int dwFlags,
    int dwReserved);

enum InternetCookieState : int
{
    COOKIE_STATE_UNKNOWN = 0x0,
    COOKIE_STATE_ACCEPT = 0x1,
    COOKIE_STATE_PROMPT = 0x2,
    COOKIE_STATE_LEASH = 0x3,
    COOKIE_STATE_DOWNGRADE = 0x4,
    COOKIE_STATE_REJECT = 0x5,
    COOKIE_STATE_MAX = COOKIE_STATE_REJECT
} 

这里有一些代码可以在website that shows your HTTP headers进行测试。

InternetSetCookieEx("http://request.urih.com/", null, "TestData=Test;", 0, 0);
webBrowser1.Navigate("http://request.urih.com/");

答案 2 :(得分:0)

瘦控件中的 cookie 有问题。使用 cookie 的导航方法有重载:

string cookie = webBrowser1.Document.Cookie.ToString(); webBrowser1.Navigate(url,"",null, cookie);

在我的例子中,问题是通过重定向到页面两次(或重复三次)解决的,所以看起来这个控件会自动启用 cookie:

           `webBrowser1.Navigate(url);
            waitforwebsite(300, webBrowser1);
            webBrowser1.Navigate(url);
            waitforwebsite(300, webBrowser1);
            webBrowser1.Navigate(url);`