C#.net模擬提交表單POST


方法一、
System.Net.WebClient WebClientObj        = new System.Net.WebClient();
   System.Collections.Specialized.NameValueCollection PostVars  = new System.Collections.Specialized.NameValueCollection();
   PostVars.Add("A1","0");
   PostVars.Add("A2","0");
   PostVars.Add("A3","000");

   try
   {
    byte[] byRemoteInfo   = WebClientObj.UploadValues("http://www.lovezhao.com/vote.asp","POST",PostVars);
    //下面都沒用啦,就上面一句話就可以了
    string sRemoteInfo   = System.Text.Encoding.Default.GetString(byRemoteInfo);  
    //這是獲取返回信息
    richTextBox_instr.Text  += sRemoteInfo;
   }
   catch
   {}



方法二、
string url = "網址";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
string s = "要提交的數據";
byte[] requestBytes = System.Text.Encoding.ASCII.GetBytes (LoginInfo);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = requestBytes.Length;
Stream requestStream = req.GetRequestStream();
requestStream.Write(requestBytes,0,requestBytes.Length);
requestStream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.Default);
string backstr = sr.ReadToEnd(); Response.Write(line); sr.Close(); res.Close(); 

 

1. 創建httpWebRequest對象 
HttpWebRequest不能直接通過new來創建,只能通過WebRequest.Create(url)的方式來獲得。 
WebRequest是獲得一些列應用層協議對象的一個統一的入口(工廠模式),它根據參數的協議來確定最終創建的對象類型。所以我們的程序里面有一個對返回對象的類型進行測試的過程。 
2. 初始化HttpWebRequest對象 
這個過程提供一些http請求常用的屬性:agentstring,contenttype等其中agentstring比較有意思,它是用來識別你用的瀏覽器名字的,通過設置這個屬性你可以欺騙服務器你是一個IE,firefox甚至是mac里面的safari。很多認真設計的網站都會根據這個值來返回對用戶瀏覽器特別優化過的代碼。

3. 附加要POST給服務器的數據到HttpWebRequest對象 
附加POST數據的過程比較特殊,它並沒有提供一個屬性給用戶存取,需要寫入HttpWebRequest對象提供的一個stream里面。 
4. 讀取服務器的返回信息 
讀取服務器返回的時候,要注意返回數據的encoding。如果我們提供的解碼類型不對會造成亂碼。比較常見的是utf-8和gb2312之間的混淆,據我測試,國內的主機一般都是gb2312編碼的。一般設計良好的網站會把它編碼的方式放在返回的http header里面,但是也有不少網站根本沒有,我們只能通過一個對返回二進制值的統計方法來確定它的編碼方式。

        /// <summary>
        /// 
        /// </summary>
        /// <param name="url">地址</param>
        /// <param name="method">方法</param>
        /// <param name="param">json參數</param>
        /// <returns></returns>
        public static string WebServiceApp(string url, string method, string param)
        {
            //轉換輸入參數的編碼類型,獲取bytep[]數組 
            byte[] byteArray = Encoding.UTF8.GetBytes("json=" + param);
            //初始化新的webRequst
            //1. 創建httpWebRequest對象
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url + "/" + method));
            //2. 初始化HttpWebRequest對象
            webRequest.Method = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.ContentLength = byteArray.Length;
            //3. 附加要POST給服務器的數據到HttpWebRequest對象(附加POST數據的過程比較特殊,它並沒有提供一個屬性給用戶存取,需要寫入HttpWebRequest對象提供的一個stream里面。)
            Stream newStream = webRequest.GetRequestStream();//創建一個Stream,賦值是寫入HttpWebRequest對象提供的一個stream里面
            newStream.Write(byteArray, 0, byteArray.Length);
            newStream.Close();
            //4. 讀取服務器的返回信息
            HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
            StreamReader php = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            string phpend = php.ReadToEnd();
            return phpend;
           
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM