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

Posted

tags:

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

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();
参考技术A 1.在WebBrowser中获取Cookie CookieContainer myCookieContainer = new CookieContainer(); string cookieStr = webBrowser1.Document.Cookie; string[] cookstr = cookieStr.Split(';'); foreach (string str in cookstr) string[] cookieNam...

C#下利用WebBrowser完整获取COOKIE

C#下利用WebBrowser完整获取COOKIE 


在WebBrowser下对网页进行操作其实是一件很轻松的事情,他可以很方便实现自定义的网站访问习惯。而WebBrowser毕竟是对MS原生控件的封装,当我们使用C#下的WebBrowser尤其是这样,虽然他可以更方便大家去掉用,但是他的方便却是牺牲了体积为代价的。

有一天我想使用WebBrowser获取一个网站的COOKIE,在调用Document.Cookie时,发现无法完整获取其COOKIE,百思不得其解,这么简单的功能,WebBrowser也秀逗。通过抓包分析,发现原来该网站对写入到用户端关键的Cookie,仅加入http

HttpOnly,实际上是一个提高WEB网站应用程序安全性的一个功能,但是大家经常都把他给忽略掉了。放在ASP.NET 2.0的web.config的配制文件里就提供这个子的设置

1 <httpCookies httpOnlyCookies =“ true” /> 
2 // ***********。NET的代码如:
3 HttpCookie myCookie =新的HttpCookie(“ myCookie”); 
4 myCookie.HttpOnly = true; 
5 Response.AppendCookie(myCookie);

就是这个小小的设置,令WebBrowser带他却是没辙,查抄资料,要想实现这个功能,一定需要实现对最原始的网络流的读写,这种方法对很多程序员来说实现困难太大了。下面就教大家实现一个很简单的实现方法

 

1个公共字符串Cookie()
2 { 
3如果(this.Url == null)
4返回null; 
5字符串dir = this.Url.Host; 
6 FileStream fr =新的FileStream(Environment.GetFolderPath(Environment.SpecialFolder.Cookies)+“ \ index.dat ”,FileMode.Open,FileAccess.Read,FileShare.ReadWrite); 
7个字节[] __dat =新字节[(int)fr.Length]; 
8楼阅读(__dat,0,__dat.Length); 
9楼Close(); 
10 fr.Dispose(); 
11个字符串__datstream = Encoding.Default.GetString(__ dat); 
12 int p1 = 0; 
13 p1 = __datstream.IndexOf(“ @” + dir,p1); 
14 if(p1 == -1)
15 p1 = __datstream.IndexOf(“ @” + dir.Substring(dir.IndexOf(‘。‘)+ 1)); 
16如果(p1 == -1)
17返回this.Document.Cookie; 
18 int p2 = __datstream.IndexOf(“。txt”,p1 +1); 
19 p1 = __datstream.LastIndexOf(‘@‘,p2); 
20个字符串dm = __datstream.Substring(p1 + 1,p2-p1 + 3).TrimStart(‘?‘); 
21 p1 = __datstream.LastIndexOf(“:”,p1); 
22 p2 = __datstream.IndexOf(‘@‘,++ p1); 
23 __datstream = string.Format(“ {0} @ {1 }”,__datstream.Substring(p1,p2-p1),dm); 
24 
25 Dictionary <字符串,字符串> __cookiedicts = new Dictionary <字符串,字符串>(); 
26字符串__n; 
27 StringBuilder __cookies =新的StringBuilder();
28 __datstream = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.Cookies)+“ \” + __datstream,Encoding.Default); 
29 p1 = -2; 
30做
31 { 
32 p1 + = 2; 
33 p2 = __datstream.IndexOf(‘ n‘,p1); 
如果(p2 == -1)
35则中断34 
第36章(许我倾城)
37 p1 = p2 +1; 
38 p2 = __datstream.IndexOf(‘ n‘,p1); 
39 if(!__ cookiedicts.ContainsKey(__ n))
40 __cookiedicts.Add(__ n,__datstream.Substring(p1,p2-p1)); 
41} 
42 while(((p1 = __datstream.IndexOf(“ * n”,p1))> -1); 
43 if(this.Document.Cookie!= null && this.Document.Cookie.Length> 0)
44 {
45 foreach(this.Document.Cookie.Split(‘;‘)中的字符串s)
46 { 
47 p1 = s.IndexOf(‘=‘); 
48如果(p1 == -1)
49继续; 
50 __datstream = s.Substring(0,p1).TrimStart(); 
51如果(__cookiedicts.ContainsKey(__ datstream))
52 __cookiedicts [__ datstream] = s.Substring(p1 + 1); 
53其他
54 __cookiedicts.Add(__ datstream,s.Substring(p1 + 1)); 
55} 
56} 
57 foreach(__ cookiedicts.Keys中的字符串s)
58 { 
59 if(__cookies.Length> 0)
60 __cookies.Append(‘;‘); 
61 __cookies.Append(s); 
62 __cookies.Append(‘=‘); 
63 __cookies.Append(__ cookiedicts [s]); 
64}
65返回__cookies.ToString(); 
66}  广州代孕[电13802269370]  北京代孕咨询电13802269370   代孕[微13802269370]+

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

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

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

如何设置WebBrowser 的Cookie?

C#下利用WebBrowser完整获取COOKIE

webbrowser如何获取cookie中的sessionid

webbrowser怎么清空cookies