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点)
C# 网络编程之网页简单下载实现的更多相关文章
- C# 网络编程之网页自动登录 (一).使用WebBrower控件模仿登录
最近学习C#网络编程中,想实现网页自动登录并提交GET/POST信息,再实现循环登录不断发送报文给服务器,服务器发送消息给客户端记录能登录的账户和密码,做到后面实现绕过验证码.动态抓取登录位置等,但由 ...
- C# 网络编程之最简单浏览器实现
最近学习C#网络编程的HTTP协议编程,HTTP即Hypertext Transfer Protocol的缩写,意为:超文本传输协议. 其中与HTTP相关的知识主要有六个类的知识,分别是 (1).Ht ...
- 【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)
RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [ ...
- Android 网络编程基础之简单聊天程序
前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...
- Linux网络编程:一个简单的正向代理服务器的实现
Linux是一个可靠性非常高的操作系统,但是所有用过Linux的朋友都会感觉到, Linux和Windows这样的"傻瓜"操作系统(这里丝毫没有贬低Windows的意思,相反这应该 ...
- iOS项目开发实战——iOS网络编程获取网页Html源码
现在我们身处互联网的时代.不论什么一个软件或是App,都会或多或少与网络打交道,并不断发生数据交互.一个没有涉及网络编程的应用会显得比較low,这里我们将会開始使用Swift开发iOS应用,而且主要来 ...
- java网络编程——socket实现简单的CS会话
还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录. 客户端 import java.io.*; import ja ...
- C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口。
最近接触了C#Socket网络编程,试着做了试试(*^__^*) 实现多个客户端和服务端互相发送消息 发送文件抖动窗口功能 服务端: using System; using System.Collec ...
- Android网络编程之——文件断点下载
一:关于断点下载所涉及到的知识点 1.对SQLite的增删改查(主要用来保存当前任务的一些信息) 2.HttpURLConnection的请求配置 HttpURLConnection connecti ...
随机推荐
- scrolView
禁止UIScrollView垂直方向滚动,只允许水平方向滚动 scrollview.contentSize = CGSizeMake(长度, 0); 禁止UIScrollView水平方向滚动,只允许 ...
- /root/.bashrc与/etc/profile的异同
要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是loginshell 和non-loginshell. 交互式模式就是shell等待你的输入,并 ...
- web前端对上传的文件进行类型大小判断的js自定义函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java 懒汉式--初步解决安全问题
2016-07-28 00:10:14 懒汉式: class text { public String k; private static text t=null;//右边代码结构比上边饿 ...
- C语言的printf输出格式控制
C语言的printf输出格式控制 printf大家都耳熟能详,但是能真正将其用法弄透的估计很少见. 转一篇,改天整理. 1.转换说明符 %a(%A) 浮点数.十六进制数字和p-(P-)记数法( ...
- 7 Reverse Integer(数字反转Easy)
题目意思:int数字反转 考虑:越界问题 class Solution { public: int reverse(int x) { ; while(x){ ans=ans*+x%; x=x/; } ...
- [jQuery编程挑战]003 克隆一个页面元素及其相关事件
挑战: a) 绑定一个点击方法到这个div,点击后此元素会淡出消失 b) 同时克隆一个新的div元素到页面,元素内容是前面div文字内容反向书写(即,sgatbg olleh),同样也具有上面的点击事 ...
- linux处理闰秒
闰秒的介绍可以参考维基百科 https://zh.wikipedia.org/wiki/闰秒 linux处理闰秒 Linux使用UTC时钟,并通过NTP (Network time protocol) ...
- JQuery调用iframe父页面元素与方法
JQuery操作iframe父页面与子页面的元素与方法 下面简单使用Jquery来操作iframe的一些记录,这个使用纯JS也可以实现. 第一.在iframe中查找父页面元素的方法: $('#id', ...
- IIS 10 安装URLRewrite组件 方式
1.Open Regedit > HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp 2.Edit "MajorVersion" an ...