使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;
using  System.Net;

namespace  WinTest
{
    
///   <summary>
    
///  通过程序自动填充并提交ASP.NET表单(Form)
    
///   </summary>
     public   partial   class  AutoPost : Form
    {
        
public  AutoPost()
        {
            InitializeComponent();
        }

        
private   void  AutoPost_Load( object  sender, EventArgs e)
        {
        }

        
private   void  postTestButton_Click( object  sender, EventArgs e)
        {
            PostByWebRequest();
        }


        
private   void  PostByWebRequest()
        {
            
try
            {
                CookieContainer cookieContainer 
=   new  CookieContainer();

                
///////////////////////////////////////////////////
                 //  1.打开 MyLogin.aspx 页面,获得 GetVeiwState & EventValidation
                 ///////////////////////////////////////////////////                 
                 //  设置打开页面的参数
                 string  URI  =   " http://localhost:1165/WebTest/MyLogin.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.自动填充并提交 MyLogin.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.分析返回的页面
                 ///////////////////////////////////////////////////
                 //   
            }
            
catch  (WebException we)
            {
                
string  msg  =  we.Message;
            }  

        }
    }
}

你可能感兴趣的:(asp.net)