HttpEntity接口的详细解释与应用

爬虫之对接口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帮助文档。

后记

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

  • 14
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在Android中,可以使用`HttpPost`类来发送HTTP请求,并通过`HttpEntity`来设置请求头。根据引用中的代码,可以通过创建一个`UrlEncodedFormEntity`对象并指定编码为`HTTP.UTF_8`来设置请求头。具体来说,可以按照以下步骤进行操作: 1. 创建一个`List<NameValuePair>`对象,将请求参数添加到列表中。 2. 使用`UrlEncodedFormEntity`类将参数列表编码为URL编码形式,并指定编码为`HTTP.UTF_8`。 3. 创建一个`HttpPost`对象,并设置请求URL。 4. 使用`HttpPost`对象的`setEntity`方法将编码后的参数实体设置为请求体。 5. 使用`HttpPost`对象的`addHeader`方法设置请求头。可以通过该方法设置各种请求头,例如设置`Content-Type`、`User-Agent`等。 在上述过程中,可以通过`addHeader`方法设置请求头。具体的请求头设置方式可能需要根据实际需求进行调整。 注意:以上提供的步骤是基于引用中的代码来说明的,实际应用时需要根据具体的情况进行调整。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [Android中HTTP请求中文乱码解决办法](https://download.csdn.net/download/weixin_38738983/14882358)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [使用HttpEntity,调用需要在请求头里加入内容的http接口](https://blog.csdn.net/weixin_42231208/article/details/109031649)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值