Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WebBrowser控件中设置cookie_C#_.net_Browser_Webbrowser Control - Fatal编程技术网

C# 在WebBrowser控件中设置cookie

C# 在WebBrowser控件中设置cookie,c#,.net,browser,webbrowser-control,C#,.net,Browser,Webbrowser Control,我正在使用WebBrowser的导航功能加载一个网站,我希望浏览器加载带有我提供的cookie的页面 以下代码不起作用: wb.Navigate(url, null, null, "Cookie: " + cookie + "\n"); 我做错了什么?我必须使用吗?这似乎不是最好的解决方案。似乎有更好的方法: 导入InternetSetCookie功能: [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)

我正在使用WebBrowser的导航功能加载一个网站,我希望浏览器加载带有我提供的cookie的页面

以下代码不起作用:

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

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

似乎有更好的方法:

导入
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
函数为该URL设置cookie

InternetSetCookie("https://my.url.com/Path/To/My/App", null, temp1.ToString() + "; expires = Sun, 01-Jan-2013 00:00:00 GMT");
导航
Web浏览器到您想要访问的URL

webBrowser1.Navigate("https://my.url.com/Path/To/My/App");
我认为这是解决这个问题的最佳方案:)。

这里有一些代码可以在一个特定的时间对其进行测试


精简控制中的Cookie出现问题。具有cookie的导航方法存在重载:

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

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

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

你找到答案了吗?对于任何试图从DateTime对象中获取“expires=”部分的人,下面介绍如何操作:
myDateTimeObj.ToUniversalTime().ToString(“ddd,dd-MMM-yyyy HH:mm:ss”)+“GMT”
如果只需要在内存中为会话设置cookie,可以直接调用:InternetSetCookieEx(“,“KEY1”,“VALUE1”,空,空)。注意:调用InternetSetCookie和InternetSetCookieEx()之间有区别。在实践中,我观察到,只有当您使用“Ex”方法时,页面发出的任何后续请求才会包含cookie。我尝试了您的代码,但无法在我的测试网站上显示cookie。我使用InternetSetCookieEx发布了我的解决方案。当我这样做时,我会得到重复的cookies。已尝试使用或不使用斜杠结束cookie域。已尝试使用带分号和不带分号的值。已尝试不修剪名称/值对和修剪。我只是想知道,在生产过程中,您是否发现了问题,修复了Cookie的设置,可能没有更新您的答案。为了澄清,当我设置保存在数据库中的Cookie,然后第三方网站设置它们时,它们最终会重复。@Valamas是,使用相同的值多次调用InternetSetCookie将以重复的Cookie结束,您需要使用InternetGetCookie检查并防止此情况,或者将Cookie集合保存在某个位置以进行比较。
InternetSetCookieEx("http://request.urih.com/", null, "TestData=Test;", 0, 0);
webBrowser1.Navigate("http://request.urih.com/");
           `webBrowser1.Navigate(url);
            waitforwebsite(300, webBrowser1);
            webBrowser1.Navigate(url);
            waitforwebsite(300, webBrowser1);
            webBrowser1.Navigate(url);`