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)
通過WebClient類的DownloadFile方法將讀取出的HTML信息保存到本地機器的指定目錄,實現代碼如下:
{
if (this.textBox1.Text.Trim().ToString() != "")
{
this.TryRequset(this.textBox1.Text.Trim().ToString());
}
else
{
MessageBox.Show("請寫入正確的URL");
}
} 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;
}
}
注意:在使用本程序之前必須得到目標機的許可才可以向目標機寫入信息。