閱讀118 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go HDU 3123 大數階乘取模
  下一篇:go HDU 4631 set維護