HttpEntity接口的详细解释与应用「建议收藏」

爬虫之对接口HttpEntity的解释(二)前言之前写了一些关于如何使用HttpClient包基本功能HttpGet与HttpPost。在其中提到了HttpEntity接口。这篇文章是对HttpEntity接口深入的探讨。一、使用的位置与方式HttpEntity是在HttpCore包中实现的,下面以HttpGet中使用位置为例(参见上一篇)DefaultHttpClienth

大家好,又见面了,我是你们的朋友全栈君。

爬虫之对接口HttpEntity的解释(二)

前言

之前写了一些关于如何使用HttpClient包基本功能HttpGet与HttpPost。在其中提到了HttpEntity接口。这篇文章是对HttpEntity接口深入的探讨。

一、使用的位置与方式

HttpEntity是在HttpCore包中实现的,下面以HttpGet中使用位置为例(参见上一篇)

DefaultHttpClient httpClient = new DefaultHttpClient();                               (A)

HttpGet httpGet = new HttpGet(url);                                             (B)

HttpResponse httpResponse = httpClient.execute(httpGet);                           (C)

HttpEntity httpEntity = httpResponse.getEntity();                                    (D)

Do something on httpEntity                                                    (E)

EntityUtils.consume(httpEntity)                                                  (F)

httpGet.releaseConnection()   

HttpEntity其实相当于一个消息实体,内容是http传送的报文(这里可以说是html,css等等文件)。这里只需要知道它是用来表征一个http报文的实体就行了,用来发送或接收。通过上面的例子,可以对使用HttpEntity有一些认识。实现HttpEntity接口有不同的类,下面介绍。

二、HttpEntity的分类

按HttpEntity内容的来源,它可以分为三类:

1.streamed(流式):从一个流传输中获得,一般是来自http连接。特点:使用时产生,不可重复

2.self-contained(自包含):存储在内存中的,独立于http连接。特点:可以重复

3.wrapping(代理,包装):从其他HttpEntity中获得。特点:依附于获取的类

在HttpEntity帮助文档中建议,将实时性的不可重复的作为流式实体处理,把可重复的(如果不会产生巨大影响)作为自我包含实体处理。

三、HttpEntity的方法介绍

HttpEntity类非常简洁,它的方法如下:

InputStreamgetContent()返回的是一个实体内容的流

注:此时这里的流与上面所说的流式实体概念有所不同。上文所说流式实体是指从连接产生具有实时性的流,而这里仅仅只内容流形式,不要混淆。

HeadergetContentEncoding()获取HttpEntity(如果有的话)实体已编码内容的头部信息(具体Header内容可以参见HttpCore帮助文档中Header类)

Long getContentLength()显而易见是获取整个实体内容的长度

BooleanisRepeatable()判断实体是否具有重现的能力,也就是一中讨论的分类

BooleanisStreaming()判断实体的内容是不是基于流

VoidwriteTo(OutputStream outstream)将实体写入一个输出流

四.实现接口HttpEntity的类

这些实现接口HttpEntity的类,其实就是在HttpEntity功能上添加了一些小小的功能。看这些类的名字就能知道它添加了什么功能。

类如下:

AbstractHttpEntity,BasicHttpEntity,BufferedHttpEntity,ByteArrayEntity,InputStreamEntity,StringEntity等等。如果在接下来的文章中有用到的话,我会提及一部分。其实这些类非常简单,完全可以自己实现。也可以参考HttpCore帮助文档。

后记

我发现自己写的内容都很简单,甚至说是很幼稚。但是,我想如果对一个已经很熟练的人来说,这样的文章也许没用,他也完全不需要去看。但是如果对一个刚刚开始学习的人来说,也许意义会有所不同,他会少走很多弯路。不过,随着学习爬虫不停地深入,我想会写出一些能值得参考的东西来的。所以,不喜勿喷。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125944.html原文链接:https://javaforall.net

(1)
上一篇 2022年4月18日 上午10:20
下一篇 2022年4月18日 上午10:40


相关推荐

  • CSS卡片翻转布局实现方法

    CSS卡片翻转布局实现方法

    2026年3月14日
    1
  • 基于fpga的spi通信设计_协议的概念

    基于fpga的spi通信设计_协议的概念一、SPI协议1、SPI协议概括SPI(SerialPeripheralInterface)——串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM、FLASH、实时时钟,AD转换器以及数字信号处理器和数字信号解码器之间。SPI是一种高速,全双工,同步的通信总线,在芯片上只占用四根线(CS、MOSI、MISO、SCK),极大的…

    2022年10月15日
    6
  • 避免硬编码[通俗易懂]

    避免硬编码[通俗易懂]第一种publicinterfaceConstants{/***SparkApplicationConstants*/StringSEPARATOR=””;StringSQLTYPE=”‘通话'”;}第三种importjava.util.Propertiesimport…

    2022年10月19日
    3
  • Oracle账号——用于java JDK等软件的下载

    Oracle账号——用于java JDK等软件的下载目前在官网下载低于 jdk1 8 的 javajdk 的时候需要登陆 这边分享一个账号 方便下载 com 密码 Oracle123jav 下载地址 点击打开链接 javajdk 源码下载 http jdk java net 提醒 为了大伙的方便 请不要随便用该邮箱重新注册 Oracle 账号

    2026年3月20日
    2
  • MySQL修改字段类型、字段名字、字段长度、字段小数点长度。

    MySQL修改字段类型、字段名字、字段长度、字段小数点长度。mysql>altertable表名modifycolumn字段名类型。数据库中address表city字段是varchar(30),修改类型可以用(谨慎修改类型,可能会导致原有数据出错)。mysql>altertableaddressmodifycolumncitychar(30);修改长度可以用(修改长度,要保证不短与已有数据,以保证原有数据不出错)mysql>altertableaddressmodifycolumncityvarcha.

    2022年5月29日
    32
  • 微信小程序下拉刷新问题

    微信小程序下拉刷新问题微信小程序下拉刷新问题 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 我们主要来说一下微信小程序的下拉刷新问题 这个问题也是我自己碰见的问题 问题比较二 但是又很恶心 所以在这里给大家分享一下 有这个问题朋友 赶紧从死胡同里出来 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 大家在做微信小程序

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号