首先介绍一下HTTP协议,HTTP亦即Hpyer Text Transfer Protocal的缩写,它是现代互联网上最重要的一种网络协议,超文本传输协议位于TCP/IP协议的应用层,是一个面向无连接、简单、快速的C/S结构的协议。HTTP的工作过程大体上分连接、请求、响应和断开连接四个步骤。C#语言对HTTP协议提供了良好的支持,在.NET类库中提供了WebRequest和WebResponse类,这两个类都包含在System.Net命名空间中,利用这两个类可以实现很多高级的网络功能,本文中多线程文件下载就是利用这两个类实现的。 WebRequest和WebResponse都是抽象基类,因此在程序中不能直接作为对象使用,必须被继承,实际使用中,可根据URI参数中的URI前缀选用它们合适的子类,对于HTTP这类URI,HttpWebRequest和HttpWebResponse类可以用于处理客户程序同WEB服务器之间的HTTP通讯。

  HttpWebRequest类实现了很多通过HTTP访问WEB服务器上文件的高级功能。HttpWebRequest类对WebRequest中定义的属性和方法提供支持,HttpWebRequest将发送到Internet资源的公共HTTP标头的值公开为属性,由方法或系统设置,常用的由属性或方法设置的HTTP标头为:接受, 由Accept属性设置, 连接, 由Connection属性和KeepAlive属性设置, Content-Length, 由ContentLength属性设置, Content-Type, 由ContentType属性设置, 范围, 由AddRange方法设置. 实际使用中是将标头信息正确设置后,传递到WEB服务器,WEB服务器根据要求作出回应。

  HttpWebResponse类继承自WebResponse类,专门处理从WEB服务器返回的HTTP响应,这个类实现了很多方法,具有很多属性,可以全面处理接收到的互联网信息。在HttpWebResponse类中,对于大多数通用的HTTP标头字段,都有独立的属性与其对应,程序员可以通过这些属性方便的访问位于HTTP接收报文标头字段中的信息,本例中用到的HttpWebResponse类属性为:ContentLength 既接收内容的长度。

  有了以上的了解后,下面看看这两个类的用法,要创建HttpWebRequest对象,不要直接使用HttpWebRequest的构造函数,而要使用WebRequest.Create方法初始化一个HttpWebRequest实例,如:

HttpWebRequest hwr=(HttpWebRequest)WebRequest.Create(http://www.163.com/);
  创建了这个对象后,就可以通过HttpWebRequest属性,设置很多HTTP标头字段的内容,如hwr.AddRange(100,1000);设置接收对象的范围为100-1000字节。

  HttpWebReques对象使用GetResponse()方法时,会返回一个HttpWebResponse对象,为提出HTTP返回报文信息,需要使用HttpWebResponse的GetResponseStream()方法,该方法返回一个Stream对象,可以读取HTTP返回的报文,如:首先定义一个Strean 对象 public System.IO.Stream ns; 然后 ns=hwr.GetResponse ().GetResponseStream ();即可创建Stream对象。

WebRequest 和 HttpWebRequest 区别相关推荐

  1. webrequest、httpwebrequest、webclient、HttpClient 四个类的区别?

    WebClient与HttpWebRequest的区别见:http://stackoverflow.com/a/4988325 WebClient与HttpClient的区别见:WebClient v ...

  2. WebRequest之HttpWebRequest实现服务器上文件的下载(一)

    WebRequest是操作WEB请求的抽象象,它作为所有WEB请求的基类,主要由FileWebRequest.FtpWebRequest.HttpWebRequest这三个类进行实现.(选自MSDN) ...

  3. C# 读取网页源码的三种办法WebClient、WebRequest、HttpWebRequest

    直接看这三种办法的源码吧, using System; using System.IO; using System.Net;namespace ReadHtml{ class ReadHtml{ st ...

  4. android multicast(组播)发送端和接收端源代码,android multicast 多播(组播)问题

    有谁遇到过同样问题的可以探讨下,或者已经解决问题的,能够指导下我 获取组播锁 private  InetAddress   group; WifiManager  wm=(WifiManager)ge ...

  5. Windows Phone 网络HttpWebRequest用法

    在Windows Phone系统中,通过HttpWebRequest类可以很容易的发送网络请求,获取网络数据.HttpWebRequest是异步操作,不会堵塞主线程. 1.通过HttpWebReque ...

  6. HttpWebRequest.Create

    /// <summary>/// 通过GET方式去获取信息./// </summary>/// <param name="type"></ ...

  7. WebRequest 类和 WebResponse 类

    WebRequest类和WebResponse类 WebClient类使用起来比较简单,但是它的功能非常有限,特别是不能使用它提供身份验证证书.这样,在上传数据时问题就出现了,许多站点都不会接受没有身 ...

  8. 浅谈线程池(下):相关试验及注意事项

    三个月,整整三个月了,我忽然发现我还有三个月前的一个小系列的文章没有结束,我还欠一个试验!线程池是.NET中的重要组件,几乎所有的异步功能依赖于线程池.之前我们讨论了线程池的作用.独立线程池的存在意义 ...

  9. 浅谈线程池(中):独立线程池的作用及IO线程池

    在上一篇文章中,我们简单讨论了线程池的作用,以及CLR线程池的一些特性.不过关于线程池的基本概念还没有结束,这次我们再来补充一些必要的信息,有助于我们在程序中选择合适的使用方式. 独立线程池 上次我们 ...

最新文章

  1. 学习这么多算法到底在解决哪些问题?深度学习之外,我们要选择谁?
  2. 一招教会你处理Flutter中的数据
  3. Windbg调试命令详解(3)
  4. java验证码(采用struts2实现)转
  5. Vue之$options
  6. Python:学习笔记之PyQt5
  7. Azure云平台 GPS大数据解决方案 EventHub+Azure Databricks+Azure Cosmos DB Cassandra
  8. 城市天际线伊甸园39W人口存档
  9. win10 myeclipse2017安装教程(附安装包)
  10. Python 基于 uiautomator2 实现《全民开喵铺》自动收币,自动签到,自动浏览得喵币
  11. (前端发邮件)vue中使用smtp.js发送邮件
  12. 自然语言处理系列四》新词发现与短语提取》新词发现
  13. LaTeX 插入章节和目录
  14. 基于JAVA点餐系统的开题报告_开题报告-餐厅点餐系统的设计与实现.doc
  15. php+js扫码枪实现签到的功能
  16. 存储连接应用服务器简单入门
  17. 使用java数据结构编写代码
  18. 个人想创业,可以做什么项目
  19. 你知道遥控器的通信原理吗?
  20. onlyoffice 源码编译,破解20连接数限制,并部署到centos7

热门文章

  1. 汉画轩区块链技术应用智慧酒店提升舒适度节能成本
  2. 唤醒手腕 - 爆肝 3 天整理出来关于 Opencv 计算机图像处理详细教程(更新中)
  3. ad7793编程c语言,AD7793在高精度温控设备中的应用
  4. 字符串操作,截取最后一个逗号
  5. numpy序列预处理dna序列_?12个很棒的Pandas和NumPy函数,让分析事半功倍
  6. Invalid bound statement (not found): com.itheima.mapper.userMapper.SelectAll
  7. python空间数据处理_基于Python的空间数据批量处理方法
  8. Fritzing软件绘制Arduino面包板接线图传感器模块库文件273
  9. 神奇的口袋(回溯DP)
  10. 绝对实用!学习计算机编程语言的方法