C#WebBrowser怎么获取和设置Cookie的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#WebBrowser怎么获取和设置Cookie的方法相关的知识,希望对你有一定的参考价值。

参考技术A 1.在WebBrowser中获取Cookie

CookieContainer myCookieContainer = new CookieContainer();

string cookieStr = webBrowser1.Document.Cookie;
string[] cookstr = cookieStr.Split(';');
foreach (string str in cookstr)

string[] cookieNameValue = str.Split('=');
Cookie ck = new Cookie(cookieNameValue[0].Trim ().ToString(), cookieNameValue[1].Trim ().ToString());
ck.Domain = "www.google.com";
myCookieContainer.Add(ck);


WebClient设置cookie!
WebClient wc = new WebClient();
wc.Headers.Add("Cookie", "phpSESSID=" + cookie + ";");
// 注意,这里是Cookie,不是Set-Cookie
byte[] re = wc.UploadData(Global.RootPath + "test.php", new byte[0]);
System.Text.UTF8Encoding converter = new System.Text.UTF8Encoding();
string str = converter.GetString(re);

2. 在WebBrowser中设置Cookie
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);



3.将WebBrowser的cookie信息传给HttpWebRequest

先建一个"CookieContainer" 把WebBrowser中的Cookie保存在里面

//在WebBrowser中登录cookie保存在WebBrowser.Document.Cookie中
CookieContainer myCookieContainer = new CookieContainer();

//String 的Cookie 要转成 Cookie型的 并放入CookieContainer中
string cookieStr = webBrowser1.Document.Cookie;
string[] cookstr = cookieStr.Split(';');

foreach (string str in cookstr)

string[] cookieNameValue = str.Split('=');
Cookie ck = new Cookie(cookieNameValue[0].Trim().ToString(), cookieNameValue[1].Trim().ToString());
ck.Domain = "www.abc.com";//必须写对
myCookieContainer.Add(ck);


HttpWebRequest hreq = (HttpWebRequest)HttpWebRequest.Create("http://www.abc.com/search.asp");
hreq.Method = "POST";
hreq.ContentType = "application/x-www-form-urlencoded";

//自己创建的CookieContainer
hreq.CookieContainer = myCookieContainer;

string postdata = "id=2005&action=search&name=";
byte[] byte1 = Encoding.ASCII.GetBytes(postdata);
hreq.ContentLength = byte1.Length;

Stream poststream = hreq.GetRequestStream();
poststream.Write(byte1, 0, byte1.Length);
poststream.Close();

HttpWebResponse hres = (HttpWebResponse)hreq.GetResponse();

c# WebRequest 使用 WebBrowser cookie

【中文标题】c# WebRequest 使用 WebBrowser cookie【英文标题】:c# WebRequest using WebBrowser cookie 【发布时间】:2010-10-13 15:02:21 【问题描述】:

我正在使用 WebBrowser 登录网站,然后我想使用正则表达式来获取一些数据,但 webRequest 没有使用网络浏览 cookie,

我的网络浏览器是公开的, 有什么方法可以在 webRequest 中使用 WebBrowser cookie 吗?

【问题讨论】:

真的很简单,我想用它来获取新闻:) 但网站受登录页面保护,所以这种方式最容易登录:) 【参考方案1】:

您可以将 CookieContainer 用于 Web 请求。

 web_cookies = new CookieContainer();
 // Create a 'WebRequest' object with the specified url.                 
 HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(url);

 myWebRequest.CookieContainer = web_cookies;

希望这会有所帮助。

好的,你想登录。那是另一回事。您可以为此使用 NetworkCredential。

public string get_secure_webpage(string url, string username, string password)
    
        WebRequest myWebRequest = WebRequest.Create(url);
        NetworkCredential networkCredential = new NetworkCredential(username, password);
        myWebRequest.Credentials = networkCredential;

...

【讨论】:

我不太确定你想做什么。也许这个页面会有所帮助:msdn.microsoft.com/en-us/library/… 实际上,大多数网站使用 cookie 进行身份验证而不是 HTTP 身份验证,因此使用 networkCredential 无济于事。只要获取 IE cookie,附加 cookie 容器就会起作用;如果没有,PInvoke 到 InternetGetCookie()【参考方案2】:
    public CookieContainer GetCookieContainer()
    
        CookieContainer container = new CookieContainer();

        foreach (string cookie in webBrowser1.Document.Cookie.Split(';'))
        
            string name = cookie.Split('=')[0];
            string value = cookie.Substring(name.Length + 1);
            string path = "/";
            string domain = ".google.com"; //change to your domain name
            container.Add(new Cookie(name.Trim(), value.Trim(), path, domain));
        

        return container;
    

这适用于大多数网站,但使用子域的网站可能会出现问题。

【讨论】:

此解决方案似乎不再起作用,因为 cookie 使用了“httponly”修饰符。这使得它们在脚本中不可见。 您可以通过 InternetGetCookieEx 访问 HttpOnly cookie【参考方案3】:

这是银光吗? 如果是这样,从 silverlight 3 开始,如果您使用浏览器网络堆栈,那么您应该免费获得 cookie。默认情况下,当您使用 WebRequest.Create() 方法创建 n HttpWebrequest 时,您会获得浏览器堆栈。注意如果你使用 CreateHTTP 方法,你会得到一个客户端堆栈,默认情况下它不包括浏览器 cookie(你必须做一些诡计来获取它们,如前所述)

请参阅http://msdn.microsoft.com/en-us/library/dd920295(VS.95).aspx,了解自版本 3 以来 Silverlight 中的网络堆栈

【讨论】:

以上是关于C#WebBrowser怎么获取和设置Cookie的方法的主要内容,如果未能解决你的问题,请参考以下文章

C#WebBrowser怎么获取和设置Cookie的方法

C#WebBrowser怎么获取和设置Cookie的方法

如何设置WebBrowser 的Cookie?

C#下利用WebBrowser完整获取COOKIE

webbrowser如何获取cookie中的sessionid

webbrowser怎么清空cookies