Java Apache HTTPClient Tutorial 深度学习(一)

Apache HTTPClient Tutorial 深度学习(一)


超文本传输协议(HTTP)可能是当今Internet上使用的最重要的协议。Web服务、网络支持的设备和网络计算的增长继续扩展了HTTP协议在用户驱动的Web浏览器之外的作用,同时增加了需要HTTP支持的应用程序的数量。尽管java.net包提供了通过HTTP访问资源的基本功能,但它并没有提供许多应用程序所需的全部灵活性或功能。HttpClient通过提供一个有效的、最新的、功能丰富的包来实现这一空白,它实现了最新HTTP标准和建议的客户端。在为基础HTTP协议提供强大支持的同时,HttpClient可能对构建HTTP敏感的客户端应用程序有兴趣,比如web浏览器、web服务客户端,或者利用或扩展HTTP协议来进行分布式通信的系统。

1. HttpClient 应用范围

•HTTP客户端传输是基于HttpCore类[http://hc.apache.org/httpcomponents-core/index.html]

•基于 I/O 阻塞

•内容不可见

2. HttpClient不支持的地方

•HttpClient并不是一个浏览器。它是一个客户端HTTP传输库。HttpClient的目的是传输和接收HTTP消息。HttpClient不会尝试处理内容,在HTML页面中执行javascript,尝试猜测内容类型,如果不是显式设置,或者重新格式化请求/重写位置uri,或者其他与HTTP传输无关的功能。

一、基本原理

1.1. Request execution

HttpClient最基本的功能是执行HTTP方法。HTTP方法的执行包含一个或多个HTTP请求/HTTP响应交换,通常由内部处理HttpClient。预期用户将提供一个要执行的请求对象,并且预计HttpClient将被执行将请求发送到目标服务器,返回对应的响应对象,或抛出异常如果执行成功。

很自然地,HttpClient API的主要入口点是定义了HttpClient接口的HttpClient接口合同上面所描述的。下面是一个以最简单的形式请求执行过程的例子:

1.1.1. HTTP request

所有HTTP请求都有一个请求行,其中包括一个方法名、一个请求URI和一个HTTP协议的版本。

HttpClient支持在HTTP/1.1规范中定义的所有HTTP方法:GET,头、POST、PUT、DELETE、TRACE和OPTIONS。每个方法类型都有一个特定的类。:HttpGet,HttpHead、HttpPost、HttpPut、HttpDelete、HttpTrace和http pop弹出。

请求-uri是一种统一的资源标识符,用于标识要应用的资源请求。HTTP请求uri由协议方案、主机名、可选端口、资源路径组成,可选的查询和可选的片段。

HttpClient提供URIBuilder实用程序类来简化请求uri的创建和修改。

1.1.2. HTTP response

HTTP响应是服务器在接收和解释后发送给客户机的一条消息一个请求消息。该消息的第一行包含了协议版本,后面是一个数字状态代码及其相关的文本短语。

1.1.3. Working with message headers

HTTP消息可以包含许多描述消息属性的头信息,比如内容长度、内容类型等。HttpClient提供了检索、添加、删除和删除的方法列举头。


1.1.4. HTTP entity

HTTP消息可以携带与请求或响应相关联的内容实体。实体可以找到在一些请求和一些响应中,因为它们是可选的。使用实体的请求被引用作为包含请求的实体。HTTP规范定义了包含请求方法的两个实体:POST和PUT。

响应通常被期望包含一个内容实体。这里也有例外比如对HEAD方法的响应和204,没有内容,304 Not修改,205重置内容响应。

HttpClient区分三种实体,这取决于它们的内容来源:

•streamed:内容是从一个流中接收的,或者是动态生成的。特别是,这类别包括从HTTP响应接收的实体。一般来说,流媒体是不存在的可重复的。

•self-contained:内容在记忆中或者通过独立于a的方式获得连接或其他实体。自包含的实体通常是可重复的。这种类型的实体将会主要用于包含HTTP请求的实体。

•wrapping:内容是从另一个实体获得的。

当从HTTP中流出内容时,这种区别对于连接管理非常重要响应。对于由应用程序创建的请求实体,并且仅使用HttpClient发送。流和自包含之间的差异是不重要的。在这种情况下,建议将不可重复的实体看作是流的,而那些可重复的实体则是自包含的。

1.1.5. Ensuring release of low level resources

为了确保系统资源的正确发布,必须关闭与内容流相关的内容流对于实体或响应本身

关闭内容流和关闭响应之间的区别在于前者将会试图通过使用实体内容来保持底层连接的存在立即关闭并丢弃连接。请注意,也需要HttpEntity writeto(OutputStream)方法来确保正确一旦实体被完全写出,系统资源就被释放。如果该方法获得一个实例io。

通过调用HttpEntity getcontent()来调用InputStream,它也将关闭流在最后条款。当使用流媒体实体时,可以使用有权使用的(HttpEntity)方法为了确保实体内容已经被完全消耗,并且底层的流已经被关闭。但是,当整个响应内容中只有一小部分需要时,可能会出现一些情况检索和执行对剩余内容和连接的性能损失可重用性过高,在这种情况下,通过关闭响应,可以终止内容流。

该连接将不会被重用,但是它所持有的所有级别资源将被正确地释放。

1.1.6. Consuming entity content(消费者)

使用它的HttpEntity getcontent(),使用实体的内容的推荐方法是或HttpEntity #用writeTo(OutputStream)方法。

HttpClient还附带了“有权”的类,它公开了几个静态方法,以便更容易地从一个实体读取内容或信息。而不是读取java.io。

输入流直接,可以在a中检索整个内容体使用来自这个类的方法的字符串/字节数组。然而,对有权的使用是强烈的除非响应实体来自一个受信任的HTTP服务器,并且被认为是不受鼓励的有限的长度。

在某些情况下,可能需要多次读取实体内容。在这种情况下实体内容必须以某种方式缓冲,无论是在内存还是在磁盘上。最简单的方法通过将原始实体包装成BufferedHttpEntity类来完成这一任务。这将导致将原始实体的内容读入内存中的缓冲区。在其他方面,实体包装器将会有最初的那个。

1.1.7. Producing entity content(生产者)

HttpClient提供了几个类,这些类可以用来高效地通过HTTP来传输内容连接。这些类的实例可以与实体封闭请求相关联,例如POST和PUT将实体内容封装到传出的HTTP请求中。HttpClient提供对于大多数常用的数据容器,例如字符串、字节数组、输入流和文件:StringEntity、ByteArrayEntity、InputStreamEntity和FileEntity。

请注意InputStreamEntity是不可重复的,因为它只能从底层数据读取流一次。通常建议实现一个自包含的自定义的HttpEntity类而不是使用通用的inputstream实体。FileEntity是一个很好的起点。

1.1.8. Response handlers(相应处理程序)

处理响应的最简单和最方便的方法是使用ResponseHandler接口,其中包括handleResponse(响应)方法。这个方法

完全使用户不必担心连接管理。当使用一个ResponseHandler,HttpClient将自动负责确保连接的释放对于连接管理器,不管请求执行是成功还是导致异常。

About Me:

Github地址:https://github.com/noseparte

Email:noseparte@aliyun.com有java与hadoop相关的技术问题,可以发私信与我交流。

NPM地址:https://www.npmjs.com/~noseparte

WebSite:http://www.noseparte.com/Copyright © 2017 noseparte

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容