關於HttpWebRequest和HttpWebResponse的應用

    最近在爲公司產品(ASP.NET B/S結構)進行升級的時候遇到了客戶的這樣一個需求.

    系統提供會議投票這樣一種功能,在會議參與者對此次會議所要研究的合同進行研討之後,系統把參與者的意見(同意,不同意,有條件同意)和意見的詳細信息列出,供會議決策者參考,最後由會議決策者輸入決策意見.

    其中每一筆合同都包括很多信息,:法人資料,兄弟公司信息,擔保人信息等等,用戶迫切需要保存這一系列信息的當前狀態.因爲這些信息在未來的系統使用過程中可能會發生變更,比如擔保人的名稱變更等等.

    但是所有的這些信息是由不同的功能結合起來組成的,如果想把這些信息進行彙總,那麼重寫所有的信息獲取方法是不太可行的,所以直接請求頁面,從服務器返回的HTML數據流中獲取所需內容也許是一個可行的辦法.

    首先在程序中維持一個所有信息請求頁面地址的列表,然後循環這個列表,進行信息的獲取.

    在程序中用到了System.Net, System.IO命名空間. 

 

        public string getPageFromURL(string url)

        {

            string content = "";

            // Create a new HttpWebRequest object.Make sure that

            // a default proxy is set if you are behind a fure wall.

            //其中,HttpWebRequest實例不使用HttpWebRequest的構造函數來創建,二是使用WebRequestCreate方法來創建.

            HttpWebRequest myHttpWebRequest1 = (HttpWebRequest)WebRequest.Create(url);

 

            //不維持與服務器的請求狀態

            myHttpWebRequest1.KeepAlive = false;

            //創建一個HttpWebRequest對象

            //Assign the response object of HttpWebRequest to a HttpWebResponse variable./

            HttpWebResponse myHttpWebResponse1;

            try

            {

                //根據微軟MSDN上所說:"決不要直接創建HttpWebResponse的實例,要使用HttpWebRequestGetResponse()方法返回的實例."具體的原因我也不清楚,可能HttpWebResponse類的構造函數中沒有實現HttpWebResponse實例的代碼吧.

                myHttpWebResponse1 = (HttpWebResponse)myHttpWebRequest1.GetResponse();

                //設置頁面的編碼模式

                System.Text.Encoding utf8 = System.Text.Encoding.Default;

                Stream streamResponse = myHttpWebResponse1.GetResponseStream();

                StreamReader streamRead = new StreamReader(streamResponse, utf8);

 

                Char[] readBuff = new Char[256];

                //這裏使用了StreamReaderRead()方法,參數意指從0開始讀取256charreadByff.

                //Read()方法返回值爲指定的字符串數組,當達到文件或流的末尾使,方法返回0

                int count = streamRead.Read(readBuff, 0, 256);

                while (count > 0)

                {

                    String outputData = new String(readBuff, 0, count);

                    content += outputData;

                    count = streamRead.Read(readBuff, 0, 256);

                }

                myHttpWebResponse1.Close();

                return (content);

            }

            catch (WebException ex)

            {

                content = "在請求URL爲:" + url + "的頁面時產生錯誤,錯誤信息爲" + ex.ToString();

                return (content);

            }

        }

 

 

發佈了48 篇原創文章 · 獲贊 7 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章