WebRequest和WebBrowser同时登陆,使用同一个sessionID

在网上找了很久,于是产生了以下方法.

针对于使用WebBrowser控件浏览网页,在其Document.Cookie中找不到SessionID信息时,

则使用WebRequest发送请求,使用response.Headers["Set-Cookie"]来获得此属性中间的SessionID.

 

复制代码
 1 CookieCollection cookieCheckCode;
 2 CookieContainer container  =   new  CookieContainer();
 3
 4 HttpWebResponse response  =   null ;
 5 HttpWebRequest request  =   null ;
 6
 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
16
17 Cookie cookie4  =   new  Cookie( " ASP.NET_SessionId " this .GetSessionId(response.Headers[ " Set-Cookie " ]));
18 cookie4.Domain  =  host;
19 cookieCheckCode.Add(cookie4);
20
21 responseStream.Close();
22 response.Close();
23
24 container.Add(cookieCheckCode);
复制代码

 

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}
复制代码

需要说明的是:

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 if  (webBrowser1.Document  !=   null )
2 {
3  foreach (Cookie ccc in cookieCheckCode)
4  {
5    InternetSetCookie(webBrowser1.Document.Url.AbsoluteUri, ccc.Name, ccc.Value);

你可能感兴趣的:(WebBrowser)