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/

时间: 2024-10-30 10:15:59

C# 网络编程之网页简单下载实现的相关文章

C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录

      最近学习C#网络编程中,想实现网页自动登录并提交GET/POST信息,再实现循环登录不断发送报文给服务器,服务器发送消息给客户端记录能登录的账户和密码,做到后面实现绕过验证码.动态抓取登录位置等,但由于资料很少.进度缓慢,下面这篇文章仅供大家交流阅读.      也许你可能看过一篇文章关于C#实现POST提交方式中三种提取网页HTML的方法:WebBrowser.WebClient.HttpWebRequest.我也看了很多人的博客,尤其是关于WebBrowser和HttpWebRe

C# 网络编程之最简单浏览器实现

      最近学习C#网络编程的HTTP协议编程,HTTP即Hypertext Transfer Protocol的缩写,意为:超文本传输协议.其中与HTTP相关的知识主要有六个类的知识,分别是      (1).HttpWebRequest类:用于获取和操作HTTP请求:      (2).HttpWebResponse类:用于获取和操作HTTP应答:      (3).WebRequest类:用于获取和操作Web请求:      (4).WebResponse类:用于获取和操作Web应答:

网络编程的一些简单总结

网络编程是一个很大也很有趣的话题,要写好一个高性能并且bug少的服务端或者客户端程序还是挺不容易的,而且往往涉及到进程线程管理/内存管理/VFS/协议栈等许多相关的知识,尤其是并发.所以不仅仅只是会使用socket那么简单. 网络编程模型 几个相关概念: 阻塞/非阻塞 阻塞和非阻塞通常是指文件描述符本身的属性,拿socket来说,当socket读缓冲区中没有数据时或者写缓冲区满时,都会造成我们read/recv或者write/send系统调用阻塞.而非阻塞socket在这种情况下会产生EWOUL

C# 网络编程之通过豆瓣API获取书籍信息

这篇文章主要是讲述如何通过豆瓣API获取书籍的信息,起初看到这个内容我最初的想法是在"C# 网络编程之网页简单下载实现"中通过HttpWebResponse类下载源码,再通过正则表达式分析获取结点标签得到信息.但后来发现可以通过豆瓣API提供的编程接口实现.该文章仅是基础性C#网络编程文章,尝试测试了下豆瓣API,并没什么高深的内容.但希望对大家有所帮助,仅供学习.(警告:文章仅供参考,提供一种想法,否则访问多次-10次被403 forbidden莫怪.建议认证使用豆瓣API) 一.豆

网络编程-connection处理下载链接多次跳转

问题描述 connection处理下载链接多次跳转 10C 在下载更新项目中,采用的是connection 进行网络编程对数据进行下载,但是下载的链接是个 多次跳转的.(注意,不只跳转一次而是多次.),为了证实链接的有效性,我复制到uc浏览器上uc会直接作出判断获取到该地址的最终下载地址.所以希望有大神帮帮,好人一生平安 解决方案 点击图片,跳转链接 解决方案二: 好像有些标签会跳转两次

Lua下基本的网络编程示例

  这篇文章主要介绍了Lua下基本的网络编程示例,包括简单的服务器的搭建和相关web组件的介绍等,需要的朋友可以参考下 Lua是高度灵活的语言,它往往是在多个平台,包括Web应用程序中使用.成立2004年的Kepler社区提供Lua的Web组件开放源码. 虽然,也有使用Lua已经开发了其他的web框架,我们将主要集中在Kepler社区提供的组件. 应用程序和框架 Orbit 是一个lua的MVC Web框架,它是基于WSAPI. WSAPI是从Lua的Web应用程序抽象的Web主机服务器,是基于

iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>

前言:根据前篇<iOS开发之网络编程--2.NSURLSessionDownloadTask文件下载>或者<iOS开发之网络编程--3.NSURLSessionDataTask实现文件下载(离线断点续传下载)>,都遗留了一个细节未处理的问题,那就是在离线断点下载的过程中,当应用程序重新启动之后,进度条的进度值默认没有设置为之前已经下载的进度,根据基本公式"当前进度值 = 已经下载的数据长度 ÷ 最终下载完的数据总长度",已经下载的数据长度可以由沙盒中已经下载的那

iOS网络编程之二——NSURLSession的简单使用

iOS网络编程之二--NSURLSession的简单使用 一.NSURLSession简介     在iOS7之后,NSURLSession作为系统推荐使用的HTTP请求框架,在进行前台请求的情况下,NSURLSession与NSURLConnection并无太大差异,对于后台的请求,NSURLSession更加灵活的优势就将展现无遗.         1.NSURLSession集合的类型         NSURLSession类提供3中Session类型:         Default类

入门问题:请指一条学习之路!(网络编程/网页编程/Web编程)

问题描述 入门问题:请指一条学习之路!(网络编程/网页编程/Web编程) 我之前兴趣一直在单机方面的编程,但是网络早已铺天盖地,不搞网络编程是就成了井底之蛙.但是网上.书店有关网络编程/网页编程/Web编程的内容让我眼花缭乱,感觉无从下手,所以请前辈帮我一条学习之路.比如先学什么技术,再学什么等等,最好推荐几本有名的书.谢谢! 解决方案 先挑选一种语言,比如PHP.Java或者C#,然后挑选一个方向,比如前端或者后端.然后才好谈到怎么学和看什么书. 推荐你用这种语言作为关键字在amazon中搜索