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


相关推荐

  • 文心一言 4.5 开源深度剖析:性能中文双项碾压,开源引擎驱动行业变革,解锁大模型新范式

    文心一言 4.5 开源深度剖析:性能中文双项碾压,开源引擎驱动行业变革,解锁大模型新范式

    2026年3月12日
    2
  • jmeter接口测试详细教程

    jmeter接口测试详细教程jmeter 接口测试详细教程 jmeter 接口测试 总结 1 你们公司的接口测试流程是怎样的 有没有感觉熟悉 貌似在哪里听过 接口测试我们是在 XX 项目做的 主要有 XX 接口 XX 接口 XX 接口等 1 首先是从开发那里拿到 API 接口文档 了解接口业务 包括接口地址 请求方式 入参 出参 token 鉴权 返回格式等信息 2 然后使用 Postman 或 Jmeter 工具执行接口测试 一般使用 Jmeter 的步骤是这样的 1 首先新建一个线程组 2 然后就是新建一个 HTTP 请求默认值 输入接口服务器 IP 和端口

    2026年3月19日
    2
  • 只有一个源视频的Deepfakes简介[通俗易懂]

    只有一个源视频的Deepfakes简介[通俗易懂]Deepfakes简介Deepfakes是人工智能生成的任何人或名人的合成视频,它冒充真实的人,并让他们采取行动或说出他们从未做过的任何事情。Deepfake的创建过程在技术上很复杂…

    2022年5月25日
    81
  • 随笔:近期仍在流行的QQ盗号网页简析「建议收藏」

    随笔:近期仍在流行的QQ盗号网页简析「建议收藏」前言:被盗号的人们,你们的防护意识有那么弱吗?声明:本文提到的技术,仅可用作网络安全加固等合法正当目的。本文作者无法鉴别判断读者阅读本文的真实目的,敬请读者在本国法律所允许范围内阅读本文,读者一旦因非

    2022年7月3日
    231
  • Kafka集群扩容「建议收藏」

    Kafka集群扩容「建议收藏」Kafka集群的服务发现是有zk实现的,因此想kafka集群添加新的broker就非常容易。我们只需要为新的broker设置一个唯一的broker.id,然后启动新增的kafka就行。Kafka集群会自动发现新增的broker并同步原数据,包括当前集群有哪些topics以及topics的分区信息等。但是我们需要的注意的一点,新增的broker不能分担之前已经创建的topic的负载,必须手动执行…

    2022年5月16日
    44
  • V2ray 报错 failed to read response header > EOF

    V2ray 报错 failed to read response header > EOF问题 V2ray 报错 failedtoread gt EOF 解决 Linux 系统时间同步参考文献 Linux 系统时间同步的两种方法

    2026年3月17日
    1

发表回复

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

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