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. 分析返回的页面
         ///
         //    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值