在 WebBrowser 中使用来自 CookieContainer 的 cookie
Posted
技术标签:
【中文标题】在 WebBrowser 中使用来自 CookieContainer 的 cookie【英文标题】:Use cookies from CookieContainer in WebBrowser 【发布时间】:2011-05-10 06:26:20 【问题描述】:有什么方法可以让我实际使用 cookie 容器中的 cookie(之前取自 WebRequest)并在 WebBrowser 控件中使用它们?如果是这样,我该怎么做?这是针对 C# 中的 Winforms 应用程序。
【问题讨论】:
【参考方案1】:您需要使用InternetSetCookie。这是sample...
public partial class WebBrowserControl : Form
private String url;
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);
public WebBrowserControl(String path)
this.url = path;
InitializeComponent();
// set cookie
InternetSetCookie(url, "JSESSIONID", Globals.ThisDocument.sessionID);
// navigate
webBrowser.Navigate(url);
【讨论】:
我已经有了 cookie 容器和其中的 cookie,我现在需要将这些 cookie 与 webBrowser 控件一起使用,但我不确定如何在其中使用它们。你发给我的只是展示了如何从中取出 cookie,但没有描述如何将它们设置到浏览器。 就是这样。我不需要它来进行网络请求。我需要它作为 WebBrowser。 @Alex 您正在尝试从您已经获得的 CookieContainer 中填充 WebBrowser.Document.Cookie,对吗?【参考方案2】:这是一个例子哦,这是如何实现的:
private class CookieAwareWebClient : WebClient
public CookieAwareWebClient()
CookieContainer = new CookieContainer();
public CookieContainer CookieContainer get; private set;
protected override WebRequest GetWebRequest(Uri address)
var request = base.GetWebRequest(address);
var httpRequest = request as HttpWebRequest;
if (httpRequest != null)
httpRequest.CookieContainer = CookieContainer;
return request;
private void Form1_Load(object sender, EventArgs e)
using (var client = new CookieAwareWebClient())
client.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
client.DownloadData("http://www.google.com");
var cookies = client.CookieContainer.GetCookies(new Uri("http://www.google.com"));
var prefCookie = cookies["PREF"];
webBrowser1.Navigate("http://www.google.com", "", null, "Cookie: " + prefCookie.Value + Environment.NewLine);
【讨论】:
【参考方案3】:尝试首先使用“客户端”CookedWebClient 进行第一次导航并从服务器获取所有 cookie。然后,您可以从 CookedWebClient 或 WebRequest 等其他来源获取 CookedContainer,并在 WebBrowser 中使用它们,如下所示:
namespace ExampleWebBrowser
public partial class Form1 : Form
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);
CookedWebClient client = new CookedWebClient();
..
..
..
private void usingWebBrowserWithWebClientCookies(string url)
CookieCollection cookies = client.Cookies.GetCookies(url);
for (int i = 0; i < cookies.Count; i++)
Cookie c = cookies[i];
InternetSetCookie(url, c.Name, c.Value);
webBrowser1.Navigate(url);
public class CookedWebClient : WebClient
CookieContainer cookies = new CookieContainer();
public CookieContainer Cookies get return cookies;
protected override WebRequest GetWebRequest(Uri address)
WebRequest request = base.GetWebRequest(address);
if (request.GetType() == typeof(HttpWebRequest))
((HttpWebRequest)request).CookieContainer = cookies;
return request;
【讨论】:
以上是关于在 WebBrowser 中使用来自 CookieContainer 的 cookie的主要内容,如果未能解决你的问题,请参考以下文章
在 WPF WebBrowser 控件中管理 cookie?
c# WebRequest 使用 WebBrowser cookie