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属性为“http://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点   http://blog.csdn.net/eastmount/

目录
相关文章
|
29天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
3天前
|
网络安全 C#
C# HttpWebRequest 获取 HTTPS 网页内容
C# HttpWebRequest 获取 HTTPS 网页内容
10 0
|
23天前
|
数据采集 存储 iOS开发
Objective-C网络数据捕获:使用MWFeedParser库下载Stack Overflow示例
本文介绍了如何使用Objective-C的MWFeedParser库高效捕获Stack Overflow的RSS数据并保存为CSV。首先,通过CocoaPods或手动方式集成MWFeedParser库,然后设置代理服务器以隐藏真实IP。接着,创建MWFeedParser实例,设置代理和解析类型,并启动解析。当数据解析完成后,可将其转换为CSV格式并保存。提供的代码示例详细展示了整个过程。注意实际使用时需替换代理服务器的相关信息。
Objective-C网络数据捕获:使用MWFeedParser库下载Stack Overflow示例
|
24天前
|
数据采集 存储 数据安全/隐私保护
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
本文介绍如何使用Lua和lua-http库抓取LinkedIn信息,强调了Lua在爬虫开发中的应用。通过配置亿牛云爬虫代理解决IP封锁问题,实现步骤包括安装库、配置代理、发送HTTP请求、解析响应及提取信息。提供的Lua代码示例展示了下载和存储LinkedIn信息的过程。实验成功展示了Lua爬虫的可行性,但也指出需考虑反爬虫策略以应对实际挑战。
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
|
2月前
|
数据采集 API C#
网页解析高手:C#和HtmlAgilityPack教你下载视频
使用C#和HtmlAgilityPack解析小红书网页,下载其视频内容。文章涵盖了解析网页、获取视频链接、C#实现、HtmlAgilityPack简化解析、代理IP确保下载稳定及多线程提高下载效率。提供的代码示例展示了如何设置代理和多线程下载视频。实验结果显示,该方法能有效、高效地下载小红书视频。
网页解析高手:C#和HtmlAgilityPack教你下载视频
|
2月前
|
API C# 数据安全/隐私保护
C# 实现网页内容保存为图片并生成压缩包
C# 实现网页内容保存为图片并生成压缩包
|
2月前
|
数据采集 存储 Scala
挖掘网络宝藏:利用Scala和Fetch库下载Facebook网页内容
本文介绍了如何使用Scala和Fetch库下载Facebook网页内容,同时通过爬虫代理服务(以亿牛云为例)绕过网络限制。代码示例展示了配置代理服务器、多线程爬取及内容存储的过程。注意实际应用时需替换代理服务器配置和目标URL,并考虑应对复杂的反爬虫机制。此方法兼顾匿名性和效率。
挖掘网络宝藏:利用Scala和Fetch库下载Facebook网页内容
|
2月前
|
数据采集 Web App开发 数据处理
Ruby网络爬虫教程:从入门到精通下载图片
Ruby网络爬虫教程:从入门到精通下载图片
|
3月前
|
数据采集 数据安全/隐私保护
高效网络采集实践:使用 Haskell 和 html-conduit 下载 www.baidu.com 视频完整教程
网络采集在当今信息时代中发挥着关键作用,用于从互联网上获取数据并进行分析。本文将介绍如何使用 Haskell 进行网络编程,从数据采集到图片分析,为你提供一个清晰的指南。我们将探讨如何使用爬虫代理来确保高效、可靠的数据获取,并使用 Haskell 的强大功能来分析和处理数据。
157 1
|
3月前
|
域名解析 弹性计算 缓存
DNS问题之无法通过域名访问如何解决
DNS服务器是负责将域名转换为IP地址的服务,它是互联网上实现域名解析的关键基础设施;本合集将探讨DNS服务器的工作原理、配置方法和常见问题处理,帮助用户理解和优化DNS服务的使用。
80 2