这是根据《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点)

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

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

    最近学习C#网络编程中,想实现网页自动登录并提交GET/POST信息,再实现循环登录不断发送报文给服务器,服务器发送消息给客户端记录能登录的账户和密码,做到后面实现绕过验证码.动态抓取登录位置等,但由 ...

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

    最近学习C#网络编程的HTTP协议编程,HTTP即Hypertext Transfer Protocol的缩写,意为:超文本传输协议. 其中与HTTP相关的知识主要有六个类的知识,分别是 (1).Ht ...

  3. 【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)

    RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [ ...

  4. Android 网络编程基础之简单聊天程序

    前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...

  5. Linux网络编程:一个简单的正向代理服务器的实现

    Linux是一个可靠性非常高的操作系统,但是所有用过Linux的朋友都会感觉到, Linux和Windows这样的"傻瓜"操作系统(这里丝毫没有贬低Windows的意思,相反这应该 ...

  6. iOS项目开发实战——iOS网络编程获取网页Html源码

    现在我们身处互联网的时代.不论什么一个软件或是App,都会或多或少与网络打交道,并不断发生数据交互.一个没有涉及网络编程的应用会显得比較low,这里我们将会開始使用Swift开发iOS应用,而且主要来 ...

  7. java网络编程——socket实现简单的CS会话

    还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录. 客户端 import java.io.*; import ja ...

  8. C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口。

    最近接触了C#Socket网络编程,试着做了试试(*^__^*) 实现多个客户端和服务端互相发送消息 发送文件抖动窗口功能 服务端: using System; using System.Collec ...

  9. Android网络编程之——文件断点下载

    一:关于断点下载所涉及到的知识点 1.对SQLite的增删改查(主要用来保存当前任务的一些信息) 2.HttpURLConnection的请求配置 HttpURLConnection connecti ...

随机推荐

  1. strace 使用

  2. 【转】 分析iOS Crash文件:符号化iOS Crash文件的3种方法

    当你的应用提交到AppStore或者各个渠道之后,请问你多久会拿到crash文件?你如何分析crash文件的呢? 上传crash文件 你的应用应当有模块能够在应用程序crash的时候上传crash信息 ...

  3. 实现textarea限制输入字数

    实现textarea限制输入字数(包含中文只能输入10个,全ASCII码能够输入20个) textarea称文本域,又称文本区,即有滚动条的多行文本输入控件,在网页的提交表单中经常用到.与单行文本框t ...

  4. 使用C#连接ORACLE数据库

    一.使用OracleClient组件连接Oracle   .Net框架的System.Data.OracleClient.dll组件(ADO.Net组件),为连接和使用Oracle数据库提供了很大的方 ...

  5. ASP.NET MVC中的模型绑定

    模型绑定的本质   任何控制器方法的执行都受action invoker组件(下文用invoker代替)控制.对于每个Action方法的参数,这个invoker组件都会获取一个Model Binder ...

  6. [转]Python中的with…as…

    先说明一个常见问题,文件打开: 1 2 3 4 5 6 7 try:     f = open('xxx')     do something except:     do something fin ...

  7. Git 远程仓库的管理和使用

    要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库.远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写.同他人协作开发某 个项目时,需要管理这些远程仓库 ...

  8. struts2中的路径问题

    <?xml version="1.0" encoding="GB18030" ?><%@ page language="java&q ...

  9. 黑马程序员—C语言的判断语句

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.分支结构 结构化程序设计(英语:Structured programming),一种编程范型 ...

  10. poi简单案例

    //poi api 操作 public static void main(String[] args) {  // TODO Auto-generated method stub  // 创建一个工作 ...