第二节中,我们介绍了WebRequest,它可以帮助我们发送一个请求,不过正所谓“来而不往非礼也”,对方收到我们的请求,不给点回复,貌似不太合适(不过,还真有脸皮厚的:P)。

接下来,就重点研究一下,我们收到的回复,是个什么样的东东

[Code 1.3.1]

     //
// Summary:
// Provides a response from a Uniform Resource Identifier (URI). This is an abstract
// class.
public abstract class WebResponse : MarshalByRefObject, ISerializable, IDisposable
{
//
// Summary:
// Initializes a new instance of the System.Net.WebResponse class.
protected WebResponse();
//
// Summary:
// Initializes a new instance of the System.Net.WebResponse class from the specified
// instances of the System.Runtime.Serialization.SerializationInfo and System.Runtime.Serialization.StreamingContext
// classes.
//
// Parameters:
// serializationInfo:
// An instance of the System.Runtime.Serialization.SerializationInfo class that
// contains the information required to serialize the new System.Net.WebRequest
// instance.
//
// streamingContext:
// An instance of the System.Runtime.Serialization.StreamingContext class that indicates
// the source of the serialized stream that is associated with the new System.Net.WebRequest
// instance.
//
// Exceptions:
// T:System.NotSupportedException:
// Any attempt is made to access the constructor, when the constructor is not overridden
// in a descendant class.
protected WebResponse(SerializationInfo serializationInfo, StreamingContext streamingContext); //
// Summary:
// Gets a System.Boolean value that indicates whether this response was obtained
// from the cache.
//
// Returns:
// true if the response was taken from the cache; otherwise, false.
public virtual bool IsFromCache { get; }
//
// Summary:
// Gets a System.Boolean value that indicates whether mutual authentication occurred.
//
// Returns:
// true if both client and server were authenticated; otherwise, false.
public virtual bool IsMutuallyAuthenticated { get; }
//
// Summary:
// When overridden in a descendant class, gets or sets the content length of data
// being received.
//
// Returns:
// The number of bytes returned from the Internet resource.
//
// Exceptions:
// T:System.NotSupportedException:
// Any attempt is made to get or set the property, when the property is not overridden
// in a descendant class.
public virtual long ContentLength { get; set; }
//
// Summary:
// When overridden in a derived class, gets or sets the content type of the data
// being received.
//
// Returns:
// A string that contains the content type of the response.
//
// Exceptions:
// T:System.NotSupportedException:
// Any attempt is made to get or set the property, when the property is not overridden
// in a descendant class.
public virtual string ContentType { get; set; }
//
// Summary:
// When overridden in a derived class, gets the URI of the Internet resource that
// actually responded to the request.
//
// Returns:
// An instance of the System.Uri class that contains the URI of the Internet resource
// that actually responded to the request.
//
// Exceptions:
// T:System.NotSupportedException:
// Any attempt is made to get or set the property, when the property is not overridden
// in a descendant class.
public virtual Uri ResponseUri { get; }
//
// Summary:
// When overridden in a derived class, gets a collection of header name-value pairs
// associated with this request.
//
// Returns:
// An instance of the System.Net.WebHeaderCollection class that contains header
// values associated with this response.
//
// Exceptions:
// T:System.NotSupportedException:
// Any attempt is made to get or set the property, when the property is not overridden
// in a descendant class.
public virtual WebHeaderCollection Headers { get; }
//
// Summary:
// Gets a value that indicates if headers are supported.
//
// Returns:
// Returns System.Boolean. true if headers are supported; otherwise, false.
public virtual bool SupportsHeaders { get; } //
// Summary:
// When overridden by a descendant class, closes the response stream.
//
// Exceptions:
// T:System.NotSupportedException:
// Any attempt is made to access the method, when the method is not overridden in
// a descendant class.
public virtual void Close();
//
// Summary:
// Releases the unmanaged resources used by the System.Net.WebResponse object.
public void Dispose();
//
// Summary:
// When overridden in a descendant class, returns the data stream from the Internet
// resource.
//
// Returns:
// An instance of the System.IO.Stream class for reading data from the Internet
// resource.
//
// Exceptions:
// T:System.NotSupportedException:
// Any attempt is made to access the method, when the method is not overridden in
// a descendant class.
public virtual Stream GetResponseStream();
//
// Summary:
// Releases the unmanaged resources used by the System.Net.WebResponse object, and
// optionally disposes of the managed resources.
//
// Parameters:
// disposing:
// true to release both managed and unmanaged resources; false to releases only
// unmanaged resources.
protected virtual void Dispose(bool disposing);
//
// Summary:
// Populates a System.Runtime.Serialization.SerializationInfo with the data that
// is needed to serialize the target object.
//
// Parameters:
// serializationInfo:
// The System.Runtime.Serialization.SerializationInfo to populate with data.
//
// streamingContext:
// A System.Runtime.Serialization.StreamingContext that specifies the destination
// for this serialization.
protected virtual void GetObjectData(SerializationInfo serializationInfo, StreamingContext streamingContext);
}

System.Net.WebResponse 全貌

相比较WebRequest而言,WebResponse简单许多,这里就不再分解片断讲解了。有事儿说事儿,不要以貌取人:D

首先,与WebRequest的类似,它还是抽象类,两个构造函数的结构,一票子虚属性,大部分都是只读的,和一票子虚方法。

其次,与WebRequest不同,它继承了System.IDisposable接口,提醒我们啊,用完了,要释放啊~~~~~~

几个属性

[Code 1.3.2]

         /// <summary>
/// 只读,指示这个回复是不是从缓存中获取的
/// </summary>
public virtual bool IsFromCache { get; }
/// <summary>
/// 只读,指示是否发生相互认证
/// </summary>
public virtual bool IsMutuallyAuthenticated { get; }
/// <summary>
/// 指示收到的数据长度
/// </summary>
public virtual long ContentLength { get; set; }
/// <summary>
/// 指示收到的内容类型
/// </summary>
public virtual string ContentType { get; set; }
/// <summary>
/// 只读,指示收到的实际资源URI
/// </summary>
public virtual Uri ResponseUri { get; }
/// <summary>
/// 只读,Header集合,HTTP协议中的重点
/// </summary>
public virtual WebHeaderCollection Headers { get; }
/// <summary>
/// 只读,指示是否支持Header集合
/// </summary>
public virtual bool SupportsHeaders { get; }

System.Net.WebResponse 属性

重要的属性有Headers、ContentType、ContentLength。对于分析数据都是举足轻重的。

几个方法

[Code 1.3.3]

         /// <summary>
/// 获得目标资源的数据流
/// </summary>
public virtual Stream GetResponseStream();
/// <summary>
/// 关闭Response流
/// </summary>
public virtual void Close();
/// <summary>
/// 释放WebResponse对象
/// </summary>
public void Dispose();
/// <summary>
/// 释放WebResponse对象
/// </summary>
protected virtual void Dispose(bool disposing);
/// <summary>
/// 使用序列化目标对象所需的数据填充System.Runtime.Serialization.SerializationInfo
/// </summary>
protected virtual void GetObjectData(SerializationInfo serializationInfo, StreamingContext streamingContext);

System.Net.WebResponse 方法

重要的方法有GetResponseStream、Close。对于获取数据至关重要。

总而言之,WebResponse还是比较简单的,给我们留下的坑不多。与WebRequest的讲解一样,干嚼无味,还是在实例中体会个中滋味吧:P

喜欢本系列丛书的朋友,可以点击链接加入QQ交流群(994761602)【C# 破境之道】
方便各位在有疑问的时候可以及时给我个反馈。同时,也算是给各位志同道合的朋友提供一个交流的平台。
需要源码的童鞋,也可以在群文件中获取最新源代码。

《C# 爬虫 破境之道》:第一境 爬虫原理 — 第三节:WebResponse的更多相关文章

  1. 网络爬虫入门:你的第一个爬虫项目(requests库)

    0.采用requests库 虽然urllib库应用也很广泛,而且作为Python自带的库无需安装,但是大部分的现在python爬虫都应用requests库来处理复杂的http请求.requests库语 ...

  2. Python爬虫实践 -- 记录我的第一只爬虫

    一.环境配置 1. 下载安装 python3 .(或者安装 Anaconda) 2. 安装requests和lxml 进入到 pip 目录,CMD --> C:\Python\Scripts,输 ...

  3. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第一节:HTTP协议数据采集

    首先欢迎您来到本书的第二境,本境,我们将全力打造一个实际生产环境可用的爬虫应用了.虽然只是刚开始,虽然路漫漫其修远,不过还是有点小鸡冻:P 本境打算针对几大派生类做进一步深耕,包括与应用的结合.对比它 ...

  4. 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第六节:第一境尾声

    在第一境中,我们主要了解了爬虫的一些基本原理,说原理也行,说基础知识也罢,结果就是已经知道一个小爬虫是如何诞生的了~那么现在,请默默回想一下,在第一境中,您都掌握了哪些内容?哪些还比较模糊?如果还有什 ...

  5. 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第五节:数据流处理的那些事儿

    为什么说到数据流了呢,因为上一节中介绍了一下异步发送请求.同样,在数据流的处理上,C#也为我们提供几个有用的异步处理方法.而且,爬虫这生物,处理数据流是基础本能,比较重要.本着这个原则,就聊一聊吧. ...

  6. 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第二节:WebRequest

    本节主要来介绍一下,在C#中制造爬虫,最为常见.常用.实用的基础类 ------ WebRequest.WebResponse. 先来看一个示例 [1.2.1]: using System; usin ...

  7. 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第一节:整体思路

    在构建本章节内容的时候,笔者也在想一个问题,究竟什么样的采集器框架,才能算得上是一个“全能”的呢?就我自己以往项目经历而言,可以归纳以下几个大的分类: 根据通讯协议:HTTP的.HTTPS的.TCP的 ...

  8. 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第四节:同步与异步请求方式

    前两节,我们对WebRequest和WebResponse这两个类做了介绍,但两者还相对独立.本节,我们来说说如何将两者结合起来,方式有哪些,有什么不同. 1.4.1 说结合,无非就是我们如何发送一个 ...

  9. 《C# 爬虫 破境之道》:概述

    第一节:写作本书的目的 关于笔者 张晓亭(Mike Cheers),1982年出生,内蒙古辽阔的大草原是我的故乡. 没有高学历,没有侃侃而谈的高谈阔论,拥有的就是那一份对技术的执著,对自我价值的追求. ...

随机推荐

  1. 符合阿里巴巴代码规范的checkstyle检测文件

    一.安装与简介 eclipse和idea都有对应的插件,找到插件安装界面.搜索checkstyle,点击安装后,重启IDE即可.(网上有很多安装教程,就不重复制造轮子了) 二.导入配置文件 在chec ...

  2. java.util.NoSuchElementException: No value present

    错误: java.util.NoSuchElementException: No value present 原因: 经查询博客Java 8 Optional类深度解析发现,究其原因为: 在空的Opt ...

  3. Vue 设置style属性

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. linux设备驱动文件结构

    struct file, 定义于 <linux/fs.h>, 是设备驱动中第二个最重要的数据结构. 注意 file 与用户空间程序的 FILE 指针没有任何关系. 一个 FILE 定义在 ...

  5. java 面试题之交通灯管理系统

    需求: 交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ...

  6. P1018 灵灵排数字

    题目描述 今天灵灵收到了n张卡片,他需要给他们从小到大排序. 输入格式 输入的第一行包含一个整数 \(n(1 \le n \le 10^5)\) . 输入的第二行包含 \(n\) 个正整数,以空格间隔 ...

  7. 5款顶尖Windows文件传输工具

    5款顶尖Windows文件传输工具 英文原文: Drasko 日常工作中,公司里的系统管理员或其他岗位的员工都需要传递大量各种类型的文件和文档.其中一些可以通过 email 收发.但由于 email ...

  8. Linux 内核 usb_control_msg 接口

    usb_control_msg 函数就像 usb_bulk_msg 函数, 除了它允许一个驱动发送和结束 USB 控制信息: int usb_control_msg(struct usb_device ...

  9. sublimeText 3使用教程

    工欲善利其事必先利其器,sublime作为一款轻量.便捷的编译工具,集成了很多插件,功能强大,深受大家的喜爱.掌握好sublime的具体用法,必会为你的工作带来极大的便利!好了,闲话不多说了,下面开始 ...

  10. com.netflix.discovery.DiscoveryClient : Completed shut down of DiscoveryClient

    启动报错:com.netflix.discovery.DiscoveryClient    : Completed shut down of DiscoveryClient 解决方案: 添加web主件 ...