在网上找了很久,于是产生了以下方法.
针对于使用WebBrowser控件浏览网页,在其Document.Cookie中找不到SessionID信息时,
则使用WebRequest发送请求,使用response.Headers["Set-Cookie"]来获得此属性中间的SessionID.
1
CookieCollection cookieCheckCode;
2
CookieContainer container = new CookieContainer();
3![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
HttpWebResponse response = null;
5
HttpWebRequest request = null;
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
request = (HttpWebRequest)WebRequest.Create(string.Format("http://{0}/Login.aspx", host));
8
request.Referer = "http://" + host;
9
request.Method = "GET";
10
request.Accept = "*/*";
11
request.Timeout = 5000;
12
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)";
13
response = (HttpWebResponse)request.GetResponse();
14
responseStream = response.GetResponseStream();
15![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
Cookie cookie4 = new Cookie("ASP.NET_SessionId", this.GetSessionId(response.Headers["Set-Cookie"]));
18
cookie4.Domain = host;
19
cookieCheckCode.Add(cookie4);
20![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
responseStream.Close();
22
response.Close();
23![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
container.Add(cookieCheckCode);
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
GetSessionID方法:
1
/// <summary>
2
/// 从Response的Headers中获取当此的SessionID
3
/// </summary>
4
/// <param name="value">[Response].[Headers].["Set-Cookie"]</param>
5
/// <returns></returns>
6
private string GetSessionId(string value)
7
{
8
string startTag = "ASP.NET_SessionId=";
9
int indexEnd = value.IndexOf(";");
10
return value.Substring(startTag.Length, indexEnd - startTag.Length);
11
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
需要说明的是:
Cookie有的时候是在response.Cookies里面,有的时候是在response.Headers["Set-Cookie"]里面,
每个网站的做法都不一样,需要自己在编码的时候结合Http/Https抓包工具(比如HttpAnalyzerStdV4)的来判断.
在调试的时候也是可以的,断点调试的时候,使用监视器查看就可以看到了.
下面这个方法是直接向webBrowser浏览器中注入cookie(不知道这样的说法对不对).
cookieCheckCode 对象是一个CookieCollection对象,里面有访问指定网站所需要的Cookie信息.可能有多个.
// url: 网址
// cookieName:cookie的名称;比如:ASP.NET_SessionId
// cookieValue:cookie的值;比如:62323DE6D2DE622AF811BDF724F4EF7
//执行完这个方法调用webBrowser1.Refresh(WebBrowserRefreshOption.Completely)就可以了.
InternetSetCookie(url, cookieName, cookieValue);
1
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
2
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);
1![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)