C#WebBrowser怎么获取和设置Cookie的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#WebBrowser怎么获取和设置Cookie的方法相关的知识,希望对你有一定的参考价值。
1.在WebBrowser中获取CookieCookieContainer 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的方法的主要内容,如果未能解决你的问题,请参考以下文章