C# 網絡編程之網頁簡單下載實現
這是根據《C#網絡編程實例教程》中學到的知識實現的一個C#網頁簡單下載器,其中涉及到的知識主要是HTTP協議編程中相關類:HttpWebRequest類、HttpWebResponse類、WebRequest類、WebResponse類、Uri類、WebClient類。通過它們相應的方法實現,這裏涉及到了4個新接觸的知識點我想重點講述:
(1).ComboBox控件:這是一個下拉列表的可編輯的文本框,右鍵該控件在顯示的"編輯項"中添加網址,可見實例中的下拉控件;
(2).saveFileDialog控件:這是一個保存文件位置對話框,通過該控件可以保存文本文件在自定義位置,還有一個相對應的打開控件OpenFileDialog;
(3).HttpWebResponse類屬性:該類常用屬性如下:每個類都有相應的屬性,這裏隻詳細說明HttpWebResponse類的屬性:

在下列實例中我使用的是HttpWebResponse response.ContentLength獲取應答內容長度。
(4).try..catch..finally:用於處理異常情況,try塊中使用引發異常語句,try塊中發生異常後跳轉到catch異常處理程序,catch用於異常處理程序,即使引發異常,finally塊中的代碼也會執行,從程序中釋放資源。
一.界麵設計

添加saveFileDialog控件,該控件的Filter(文件篩選器)屬性設置為"Web文件|*.htm"
添加一個ComboBox控件設置Text屬性為“https://www.baidu.com”,右鍵該控件Items屬性添加如下幾條網址:

二.源代碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
//添加命名空間
using System.Net;
using System.IO;
namespace Http_Web_Request
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//雙擊"開始下載"添加Click事件
private void button1_Click(object sender, EventArgs e)
{
string uri = comboBox1.Text;
//HttpWebRequest對象實例:該類用於獲取和操作HTTP請求 創建WebRequest對象
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
//HttpWebResponse對象實例:該類用於獲取和操作HTTP應答
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //獲取答複
//構造數據流、文件流對象實例
Stream stream = null;
FileStream filestream = null;
try
{
//獲取應答流賦值
stream = response.GetResponseStream();
//確定應答內容的大小
long size = response.ContentLength;
//定義"另存為對話框"文件類型
saveFileDialog1.Filter = "網頁文件(*.htm)|*.htm|ASP.NET文件(*.aspx)|*.aspx";
//打開保存對話框 點擊"確定"按鈕執行
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
//為文件流對象實例賦值
filestream = new FileStream(saveFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.Write);
int length = 1024;
byte[] Num = new byte[1025]; //構造字組
int i = 0;
while ((i = stream.Read(Num, 0, length)) > 0) //流不為空寫流
{
filestream.Write(Num, 0, i); //寫流
}
}
}
catch (Exception msg)
{
MessageBox.Show(msg.Message); //異常處理
}
finally
{
stream.Close(); //關閉流
filestream.Close();
}
}
}
}
三.運行結果
運行程序在“下拉”菜單中選擇“百度”,點擊“開始下載”後彈出的保存對話框中選擇下載地址自定義命名保存,如下圖所示:

保存後顯示下載後的靜態網址如下圖所示:

同時也在保存有的靜態網頁時會產生亂碼,如csdn網站,它下載的內容不像我們說看到的正常形式保存的。
四.總結
通過這個例子關於Http網絡編程知識我想主要表達saveFileDialog控件的使用、ComboBox下拉控件的使用、類中常用的屬性的熟悉及了解、try.catch.finally語法的應用,感謝我看的書籍作者、一些博客及自己,這篇文章加深了我自己對相關知識的了解,同時也希望幫助大家!有錯誤或不足之處見諒!
(By:Eastmount 7-30-下午4點
https://blog.csdn.net/eastmount/)
最後更新:2017-04-03 16:48:47