zoukankan      html  css  js  c++  java
  • WebRequest和WebBrowser同时登陆,使用同一个sessionID

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

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

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

    复制代码
     1CookieCollection cookieCheckCode;
     2CookieContainer container = new CookieContainer();
     3
     4HttpWebResponse response = null;
     5HttpWebRequest request = null;
     6
     7request = (HttpWebRequest)WebRequest.Create(string.Format("http://{0}/Login.aspx", host));
     8request.Referer = "http://" + host;
     9request.Method = "GET";
    10request.Accept = "*/*";
    11request.Timeout = 5000;
    12request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)";
    13response = (HttpWebResponse)request.GetResponse();
    14responseStream = response.GetResponseStream();
    15
    16
    17Cookie cookie4 = new Cookie("ASP.NET_SessionId"this.GetSessionId(response.Headers["Set-Cookie"]));
    18cookie4.Domain = host;
    19cookieCheckCode.Add(cookie4);
    20
    21responseStream.Close();
    22response.Close();
    23
    24container.Add(cookieCheckCode);
    复制代码

    GetSessionID方法:

    复制代码
     1/// <summary>
     2/// 从Response的Headers中获取当此的SessionID
     3/// </summary>
     4/// <param name="value">[Response].[Headers].["Set-Cookie"]</param>
     5/// <returns></returns>

     6private 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)]
    2public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);
    1if (webBrowser1.Document != null)
    2{
    3  foreach (Cookie ccc in cookieCheckCode)
    4  {
    5    InternetSetCookie(webBrowser1.Document.Url.AbsoluteUri, ccc.Name, ccc.Value);
  • 相关阅读:
    构造函数的特点
    HashMap源码分析
    DVWA-7.1 SQL Injection(SQL注入)-Low
    DVWA-6.4 Insecure CAPTCHA(不安全的验证码)-Impossible
    DVWA-6.3 Insecure CAPTCHA(不安全的验证码)-High
    DVWA-6.2 Insecure CAPTCHA(不安全的验证码)-Medium
    DVWA-6.1 Insecure CAPTCHA(不安全的验证码)-Low
    DVWA-5.4 File Upload(文件上传)-Impossible
    DVWA-5.3 File Upload(文件上传)-High-绕过文件类型限制
    DVWA-5.2 File Upload(文件上传)-Medium-绕过文件类型限制
  • 原文地址:https://www.cnblogs.com/ArRan/p/2803615.html
Copyright © 2011-2022 走看看