现在的位置: 首页 > 综合 > 正文

如何用ASP.net将参数进行Post提交

2012年11月06日 ⁄ 综合 ⁄ 共 3453字 ⁄ 字号 评论关闭

 

有很多页面是不能够直接访问的,往往是由于session或者cookie控制了,需要用户名和密码登录后才可以看到,怎么用Asp.net程序直接获取需要验证的页面?下面这个函数可以实现:

protected static string cookieheader;
        public string Login(String url, String paramList) 
        {
            HttpWebResponse res = null;
            string strResult="";

            try 
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                req.AllowAutoRedirect = false;
                CookieContainer cookieCon = new CookieContainer();
                req.CookieContainer = cookieCon;

                StringBuilder UrlEncoded = new StringBuilder();
                Char[] reserved = {'?', '=', '&'};
                byte[] SomeBytes = null;

                if (paramList != null) 
                {
                    int i=0, j;
                    while(i
<paramList.Length)
                    {
                        j
=paramList.IndexOfAny(reserved, i);
                        if (j
==-1)
                        
{
                            UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, paramList.Length-i)));
                            break;
                        }
                        UrlEncoded.Append(HttpUtility.UrlEncode(paramList.Substring(i, j-i)));
                        UrlEncoded.Append(paramList.Substring(j,1));
                        i 
= j+1;
                    
}
                    SomeBytes 
= Encoding.UTF8.GetBytes(UrlEncoded.ToString());
                    
req.ContentLength = SomeBytes.Length;
                    
Stream newStream = req.GetRequestStream();
                    
newStream.Write(SomeBytes, 0, SomeBytes.Length);
                    newStream.Close();
                } 
                else 
                {
                    req.ContentLength 
= 0;
                
}

                res 
= (HttpWebResponse)req.GetResponse();
                
cookieheader = req.CookieContainer.GetCookieHeader(new Uri(url));
                HttpContext.Current.Application.Lock();
                HttpContext.Current.Application["cookieheader"] 
= cookieheader;
                
HttpContext.Current.Application.UnLock();

                Stream ReceiveStream 
= res.GetResponseStream();
                
Encoding encode = System.Text.Encoding.UTF8;
                
StreamReader sr = new StreamReader( ReceiveStream, encode );
                Char[] read 
= new Char[256];
                int count 
= sr.Read( read, 0, 256 );
                while (count 
> 0) 
                {
                    String str = new String(read, 0, count);
                    strResult += str;
                    count = sr.Read(read, 0, 256);
                }
            } 
            catch(Exception e) 
            {
                strResult = e.ToString();
            } 
            finally 
            {
                if ( res != null ) 
                {
                    res.Close();
                }
            }
            strResult = strResult.Replace("\r\n","");
            return strResult;
        }

参数说明:url表示提交的目标页面。
                paramList表示参数列表(格式如:param1=123&parma2=456)
               
使用例子:
 void LoginSample()
  {
   if (HttpContext.Current.Application["cookieheader"] != null)
   {
    cookieheader = (string)HttpContext.Current.Application["cowokieheader"];
   }
   else
   {
    Login("http://www.myule.com/login.asp", "user=likef&password=likef&Next= 登 录 ");
   }

运行上面函数就会产生一个cookie,然后就可以轻而易举的得后需要验证的页面内容了。

抱歉!评论已关闭.