C#模擬登入總結

iDotNetSpace發表於2010-05-07
///   登入
        
/// 
        
/// 
        
/// 
        
/// 

        public static 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));
                Stream ReceiveStream 
= res.GetResponseStream();
                Encoding encode 
= System.Text.Encoding.GetEncoding("GBK");
                StreamReader sr 
= new StreamReader(ReceiveStream, encode);
                Char[] read 
= new Char[256];
                
int count = sr.Read(read, 0256);
                
while (count > 0)
                
{
                    String str 
= new String(read, 0, count);
                    strResult 
+= str;
                    count 
= sr.Read(read, 0256);
                }

            }

            
catch (Exception e)
            
{
                strResult 
= e.ToString();
            }

            
finally
            
{
                
if (res != null)
                
{
                    res.Close();
                }

            }

            
return strResult;
        }

        
///   獲取頁面HTML
        
/// 
        
/// 
        
/// 
        
/// 

        public static string getPage(String url, String paramList)
        
{
            HttpWebRequest req 
= (HttpWebRequest)WebRequest.Create(url);
            req.Headers[
"If-None-Match"= "36d0ed736e88c71:d9f";
            req.Referer 
= "http://website/login.do";
            CookieContainer cookieCon 
= new CookieContainer();
            req.CookieContainer 
= cookieCon;
            req.CookieContainer.SetCookies(
new Uri(url), cookieheader);
            HttpWebResponse res 
= (HttpWebResponse)req.GetResponse();
            StreamReader sr 
= new StreamReader(res.GetResponseStream(),Encoding.Default);
            
string strResult = sr.ReadToEnd();
            sr.Close();
            
return strResult;
        }
呼叫:

        string postData = "userName=admin&password=pass&area=2006&Submit=%B5%C7+%C2%BC";            
        string strLogin, strResult;
        strLogin = Login("http://website/login.do", postData);

         strResult = getPage("http://website/tohjtree.do", "");
//輸出
         this.webBrowser1.Document.Write(strResult);

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-662140/,如需轉載,請註明出處,否則將追究法律責任。

相關文章