程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> WebRequest類、WebResponse類和WebClient類

WebRequest類、WebResponse類和WebClient類

編輯:關於C#

WebRequest類

WebRequest類是.NET Framework中“請求/響應”模型的abstract基類,用於訪問Internet數據。使用WebRequest類請求/響應模型的應用程序可以用協議不可知的方式從Internet請求數據,在這種方式下,應用程序處理WebRequest類的實例,而協議特定的子類則執行請求的具體細節,請求從應用程序發送到某個特定的URI,如服務器上的網頁。URI從一個為應用程序注冊的WebRequest子類列表中確定要創建的適當子類。注冊WebRequest子類通常是為了處理某個特定的協議(如HTTP或FTP),但是也可以注冊它以處理對特定服務器或服務器上的路徑的請求。

WebRequest類中最常用的是Create方法,下面對其進行詳細介紹。

Create方法用於為指定的URI方案初始化新的WebRequest實例。

語法:

public static WebRequest Create
(
  string requestUriString
)
參數:

requestUriString:標識Internet資源的URI。

返回值:特定URI方案的WebRequest子類。

注意:Create方法將運行時確定的WebRequest類的子類作為與requestUri最接近的注冊匹配項返回。例如,當以http://開頭的URI在requestUri中傳遞時,由Create返回一個HttpWebRequest。如果改為傳遞以file://開頭的URI,則Create方法將返回FileWebRequest實例。.NET Framework包括對http://和file:// URI方案的支持。

WebResponse類

WebResponse類是abstract基類,協議特定的響應類從該抽象基類派生。應用程序可以使用 WebResponse類的實例以協議不可知的方式參與請求和響應事務,而從WebResponse類派生的協議特定的類攜帶請求的詳細信息。

在WebResponse類中最常用的是GetResponse方法,下面對其進行詳細介紹。

GetResponse方法用於當在子類中被重寫時,返回對 Internet 請求的響應

語法:

public virtual WebResponse GetResponse ()

返回值:包含對Internet請求的響應的WebResponse。

WebClient類

WebClient類提供向URI標識的任何本地、Intranet或Internet資源發送數據以及從這些資源接收數據的公共方法。WebClient類中,最常用的是DownloadFile方法,下面對其進行詳細介紹。

DownloadFile方法:將具有指定URI的資源下載到本地文件。

語法:

public void DownloadFile
(
  string address,
  string fileName
)
參數:

address:從中下載數據的URI。

Filename:要接收數據的本地文件的名稱。

在C#中,可以通過HttpWebResponse類與WebRequest類實現文件的下載,本實例將實現HTML網頁的下載。運行本實例,單擊窗體中的【獲取網頁內容】按鈕,即可下載任何網站的主頁,並且可以通過WebClient類將其保存到指定位置。當下載HTML頁時示例運行結果如圖**和圖**所示,當要將HTML頁下載到本地硬盤上時示例運行結果。

程序開發步驟:

(1)在VS2005項目中添加一個窗體。

(2)在窗體上添加兩個TextBox文本框,分別用於獲得URL信息與保存文件的路徑信息。

(3)在窗體上添加兩個Button按鈕,用來觸發相應的事件,同時添加一個多行TextBox文本框,用於顯示信息。

(4)程序代碼如下。

    public void TryRequset (string StrUrl)
     {
       HttpWebResponse response;
       WebRequest request;
       try
       {
         request = WebRequest.Create(StrUrl);
         request.Credentials = CredentialCache.DefaultCredentials;
         response = (HttpWebResponse)request.GetResponse();
         Stream dataStream = response.GetResponseStream();
         StreamReader reader = new StreamReader(dataStream);
         string responseFromServer = reader.ReadToEnd();
         this.richTextBox1.Text = responseFromServer.ToString();
         reader.Close ();
         dataStream.Close ();
         response.Close();
       }
       catch
       {
         MessageBox.Show("URL格式不正確或連接不到internet");
         return;
       }
     }

通過調用TryRequset方法將URL傳遞進出,並獲得目標機器的HTML信息,實現代碼如下:    private void button1_Click(object sender, EventArgs e)
     {
       if (this.textBox1.Text.Trim().ToString() != "")
       {
         this.TryRequset(this.textBox1.Text.Trim().ToString());
       }
       else
       {
         MessageBox.Show("請寫入正確的URL");
       }
     }
通過WebClient類的DownloadFile方法將讀取出的HTML信息保存到本地機器的指定目錄,實現代碼如下:    private void saveInfo(string strPath,string strDown)
     {
       WebClient wC = new WebClient();
       wC.DownloadFile(strDown, strPath);
     }

通過調用saveInfo方法將文件路徑傳入,並且限定保存的格式,實現代碼如下:

private void button2_Click(object sender, EventArgs e)
     {
       saveFileDialog1.Filter = "文本文件|*.txt";
       if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
       {  
         this.textBox2.Text = this.saveFileDialog1.FileName;
         if (this.textBox1.Text.Trim().ToString() != "")
         {
           saveInfo(this.textBox2.Text.Trim().ToString(),
           this.textBox1.Text.Trim().ToString());
           MessageBox.Show("保存成功");
         }
         else
        {
           MessageBox.Show("請寫入目標頁的URL");
           this.textBox2.Text = string.Empty;
         }
       }
      }

本實例通過FileWebRequest類與Uri類實現向不同機器寫入信息。

程序開發步驟:

(1)在VS2005項目中添加一個窗體。

(2)在窗體上添加一個TextBox文本框,用於獲得Uri信息。

(3)在窗體上添加一個Button按鈕,用來觸發相應的事件,同時添加一個多行TextBox文本框,用於顯示信息。

(4)程序代碼如下。

 private static void makeFileRequest (string fileName, int timeout)
     {
       try
       {
         Uri myUrl = new Uri(fileName);
         myFileWebRequest = (FileWebRequest)WebRequest.CreateDefault(myUrl);
         myFileWebRequest.Timeout = timeout;//獲取或設置請求超時前的時間長度
         myFileWebRequest.Method = "POST";//獲取或設置用於請求的協議方法
       }
       catch (Exception e)
       {
         MessageBox.Show("請輸入有效信息(以file://開頭)" );
       }
     }

自定義一個writeToFile方法,該方法使用StreamWriter類的Write方法將信息寫入目示機器。writeToFile方法實現代碼如下:    private bool writeToFile ()
     {
       try
       {
         string userInput =richTextBox1.Text.Trim().ToString();
         StreamWriter sW=new StreamWriter(myFileWebRequest.GetRequestStream());
         sW.Write(userInput);
         sW.Close();
         return true;
       }
       catch (WebException e)
       {
        MessageBox.Show("無權訪問目標機器");
        return false;
       }
       catch (UriFormatException e)
       {
         MessageBox.Show("URL地址格式不正確");
         return false;
       }
       catch (Exception ey)
       {
         MessageBox.Show("請寫入正確信息");
         return false;
       }
     }

注意:在使用本程序之前必須得到目標機的許可才可以向目標機寫入信息。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved