• asp.net 程序自动提交登陆表单并保持Session及Cookie


    代码要点:

    1、通过附加一个cookiecontainer到httprequest对象中,可以得到登录后返回的代表SESSION ID的COOKIE。

    2、将此COOKIE包含在一个cookiecontainer中并附加到另一个HTTPREQUEST请求中,则可以实现SESSION的还原。

    部分主要代码:

            CookieContainer cookieContainer = new CookieContainer();

            
    ///////////////////////////////////////////////////
            // 1. 打开 Login.aspx 页面,获得 VeiwState & EventValidation。
            //
    如果是登陆页为asp.net页面,需要获取VeiwState及EventValidation
            ///////////////////////////////////////////////////                
            // 设置打开页面的参数
            string URI = http://localhost/Test/Login.aspx;
             HttpWebRequest request
    = WebRequest.Create(URI) as HttpWebRequest;
             request.Method
    = "GET";
             request.KeepAlive
    = false;

            
    // 接收返回的页面
             HttpWebResponse response = request.GetResponse() as HttpWebResponse;
             System.IO.Stream responseStream
    = response.GetResponseStream();
             System.IO.StreamReader reader
    = new System.IO.StreamReader(responseStream,Encoding.UTF8);
            
    string srcString = reader.ReadToEnd();

            
    // 获取页面的 VeiwState                
            string viewStateFlag = "id=\"__VIEWSTATE\" value=\"";
            int i = srcString.IndexOf(viewStateFlag) + viewStateFlag.Length;
            
    int j = srcString.IndexOf("\"", i);
            string viewState = srcString.Substring(i, j - i);

            
    // 获取页面的 EventValidation                
            string eventValidationFlag = "id=\"__EVENTVALIDATION\" value=\"";
             i = srcString.IndexOf(eventValidationFlag) + eventValidationFlag.Length;
             j
    = srcString.IndexOf("\"", i);
            string eventValidation = srcString.Substring(i, j - i);

            
    ///////////////////////////////////////////////////
            // 2. 自动填充并提交 Login.aspx 页面
            ///////////////////////////////////////////////////
            // 提交按钮的文本
            string submitButton = "登录";

            
    // 用户名和密码
            string userName = "1";
            
    string password = "1";

            
    // 将文本转换成 URL 编码字符串
             viewState = System.Web.HttpUtility.UrlEncode(viewState);
             eventValidation
    = System.Web.HttpUtility.UrlEncode(eventValidation);
             submitButton
    = System.Web.HttpUtility.UrlEncode(submitButton);

            
    // 要提交的字符串数据。格式形如:user=uesr1&password=123
            string formatString =
                     "userName={0}&password={1}&loginButton={2}&__VIEWSTATE={3}&__EVENTVALIDATION={4}";
            
    string postString =
                     string.Format(formatString, userName, password, submitButton, viewState, eventValidation);

            
    // 将提交的字符串数据转换成字节数组
            byte[] postData = Encoding.ASCII.GetBytes(postString);

            
    // 设置提交的相关参数
             request = WebRequest.Create(URI) as HttpWebRequest;
             request.Method
    = "POST";
             request.KeepAlive
    = false;
             request.ContentType
    = "application/x-www-form-urlencoded";
            request.CookieContainer = cookieContainer;
             request.ContentLength = postData.Length;

            
    // 提交请求数据
             System.IO.Stream outputStream = request.GetRequestStream();
             outputStream.Write(postData,
    0, postData.Length);
             outputStream.Close();

            
    // 接收返回的页面
             response = request.GetResponse() as HttpWebResponse;
             responseStream
    = response.GetResponseStream();
             reader
    = new System.IO.StreamReader(responseStream,Encoding.GetEncoding("GB2312"));
             srcString
    = reader.ReadToEnd();

            
    ///////////////////////////////////////////////////
            // 3. 打开 Default.aspx 页面
            ///////////////////////////////////////////////////
            // 设置打开页面的参数
             URI = "http://localhost:1165/WebTest/Default.aspx";
             request
    = WebRequest.Create(URI) as HttpWebRequest;
             request.Method
    = "GET";
             request.KeepAlive
    = false;
            request.CookieContainer = cookieContainer;

            
    // 接收返回的页面
             response = request.GetResponse() as HttpWebResponse;
             responseStream
    = response.GetResponseStream();
             reader
    = new System.IO.StreamReader(responseStream, Encoding.UTF8);
             srcString
    = reader.ReadToEnd();

            
    ///////////////////////////////////////////////////
            // 4. 分析返回的页面
            ///////////////////////////////////////////////////
            //

  • 相关阅读:
    Elasticsearchdump 数据导入/导出
    04.2 go-admin前后端打包为一个服务上线
    go-admin开发小技巧
    假设知道服务器IP,如何查询它绑定的域名?
    webstorm eslint 配置格式化的两种方式
    lodash中的深拷贝方法cloneDeep()
    go 操作elaticsearch
    gin返回json假数据
    gin 图片上传到本地或者oss
    世界地图
  • 原文地址:https://www.cnblogs.com/juan/p/1424331.html
Copyright © 2020-2023  润新知