httpclient4 中文版帮助文档

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

httpclient4中文版帮助文档,最新官方版翻译版前言超文本传输协议(HTTP)也许是当今互联网上使用的最重要的协议了。Web服务,有网络功能的设备和网络计算的发展,都持续扩展了HTTP协议的角色,超越了用户使用的Web浏览器范畴,同时,也增加了需要HTTP协议支持的应用程序的数量。尽管java.net包提供了基本通过HTTP访问资源的功能,但它没有提供全面的灵活性和其它很多应用程序需要的功能。HttpClient就是寻求弥补这项空白的组件,通过提供一个有效的,保持更新的,功能丰富的软件包来实现客户端最新的HTTP标准和建议。为扩展而设计,同时为基本的HTTP协议提供强大的支持,HttpClient组件也许就是构建HTTP客户端应用程序,比如web浏览器,web服务端,利用或扩展HTTP协议进行分布式通信的系统的开发人员的关注点。1.HttpClient的范围基于HttpCore[]的客户端HTTP运输实现库基于经典(阻塞)I/O内容无关2.什么是HttpClient不能做的HttpClient不是一个浏览器。它是一个客户端的HTTP通信实现库。HttpClient的目标是发送和接收HTTP报文。HttpClient不会去缓存内容,执行嵌入在HTML页面中的javascript代码,猜测内容类型,重新格式化请求/重定向URI,或者其它和HTTP运输无关的功能。第一章基础1.1执行请求HttpClient最重要的功能是执行HTTP方法。一个HTTP方法的执行包含一个或多个HTTP请求/HTTP响应交换,通常由HttpClient的内部来处理。而期望用户提供一个要执行的请求对象,而HttpClient期望传输请求到目标服务器并返回对应的响应对象,或者当执行不成功时抛出异常。很自然地,HttpClientAPI的主要切入点就是定义描述上述规约的HttpClient接口。这里有一个很简单的请求执行过程的示例:HttpClienthttpclient=newDefaultHttpClient();HttpGethttpget=newHttpGet();HttpResponseresponse=httpclient.execute(httpget);HttpEntityentity=response.getEntity();if(entity!=null){InputStreaminstream=entity.getContent();intl;byte[]tmp=newbyte[2048];while((l=instream.read(tmp))!=-1){}}1.1.1HTTP请求所有HTTP请求有一个组合了方法名,请求URI和HTTP协议版本的请求行。HttpClient支持所有定义在HTTP/1.1版本中的HTTP方法:GET,HEAD,POST,PUT,DELETE,TRACE和OPTIONS。对于每个方法类型都有一个特殊的类:HttpGet,HttpHead,HttpPost,HttpPut,HttpDelete,HttpTrace和HttpOptions。请求的URI是统一资源定位符,它标识了应用于哪个请求之上的资源。HTTP请求URI包含一个协议模式,主机名称,可选的端口,资源路径,可选的查询和可选的片段。HttpGethttpget=newHttpGet(=en&q=httpclient&btnG=Google+Search&aq=f&oq=);HttpClient提供很多工具方法来简化创建和修改执行URI。URI也可以编程来拼装:URIuri=URIUtils.createURI(http,=httpclient&btnG=Google+Search&aq=f&oq=,null);HttpGethttpget=newHttpGet(uri);System.out.println(httpget.getURI());输出内容为:=httpclient&btnG=Google+Search&aq=f&oq=查询字符串也可以从独立的参数中来生成:ListNameValuePairqparams=newArrayListNameValuePair();qparams.add(newBasicNameValuePair(q,httpclient));qparams.add(newBasicNameValuePair(btnG,GoogleSearch));qparams.add(newBasicNameValuePair(aq,f));qparams.add(newBasicNameValuePair(oq,null));URIuri=URIUtils.createURI(http,(qparams,UTF-8),null);HttpGethttpget=newHttpGet(uri);System.out.println(httpget.getURI());输出内容为:=httpclient&btnG=Google+Search&aq=f&oq=1.1.2HTTP响应HTTP响应是由服务器在接收和解释请求报文之后返回发送给客户端的报文。响应报文的第一行包含了协议版本,之后是数字状态码和相关联的文本段。HttpResponseresponse=newBasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK,OK);System.out.println(response.getProtocolVersion());System.out.println(response.getStatusLine().getStatusCode());System.out.println(response.getStatusLine().getReasonPhrase());System.out.println(response.getStatusLine().toString());输出内容为:HTTP/1.1200OKHTTP/1.1200OK1.1.3处理报文头部一个HTTP报文可以包含很多描述如内容长度,内容类型等信息属性的头部信息。HttpClient提供获取,添加,移除和枚举头部信息的方法。HttpResponseresponse=newBasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK,OK);response.addHeader(Set-Cookie,c1=a;path=/;domain=localhost);response.addHeader(Set-Cookie,c2=b;path=\/\,c3=c;domain=\localhost\);Headerh1=response.getFirstHeader(Set-Cookie);System.out.println(h1);Headerh2=response.getLastHeader(Set-Cookie);System.out.println(h2);Header[]hs=response.getHeaders(Set-Cookie);System.out.println(hs.length);输出内容为:Set-Cookie:c1=a;path=/;domain=localhostSet-Cookie:c2=b;path=/,c3=c;domain=localhost获得给定类型的所有头部信息最有效的方式是使用HeaderIterator接口。HttpResponseresponse=newBasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK,OK);response.addHeader(Set-Cookie,c1=a;path=/;domain=localhost);response.addHeader(Set-Cookie,c2=b;path=\/\,c3=c;domain=\localhost\);HeaderIteratorit=response.headerIterator(Set-Cookie);while(it.hasNext()){System.out.println(it.next());}输出内容为:Set-Cookie:c1=a;path=/;domain=localhostSet-Cookie:c2=b;path=/,c3=c;domain=localhost它也提供解析HTTP报文到独立头部信息元素的方法方法。HttpResponseresponse=newBasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK,OK);response.addHeader(Set-Cookie,c1=a;path=/;domain=localhost);response.addHeader(Set-Cookie,c2=b;path=\/\,c3=c;domain=\localhost\);HeaderElementIteratorit=newBasicHeaderElementIterator(response.headerIterator(Set-Cookie));while(it.hasNext()){HeaderElementelem=it.nextElement();System.out.println(elem.getName()+=+elem.getValue());NameValuePair[]params=elem.getParameters();for(inti=0;iparams.length;i++){System.out.println(+params[i]);}}输出内容为:c1=apath=/domain=localhostc2=bpath=/c3=cdomain=localhost1.1.4HTTP实体HTTP报文可以携带和请求或响应相关的内容实体。实体可以在一些请求和响应中找到,因为它们也是可选的。使用了实体的请求被称为封闭实体请求。HTTP规范定义了两种封闭实体的方法:POST和PUT。响应通常期望包含一个内容实体。这个规则也有特例,比如HEAD方法的响应和204NoContent,304NotModified和205ResetContent响应。HttpClient根据其内容出自何处区分三种类型的实体:streamed流式:内容从流中获得,或者在运行中产生。特别是这种分类包含从HTTP响应中获取的实体。流式实体是不可重复生成的。self-contained自我包含式:内容在内存中或通过独立的连接或其它实体中获得。自我包含式的实体是可以重复生成的。这种类型的实体会经常用于封闭HTTP请求的实体。wrapping包装式:内容从另外一个实体中获得。当从一个HTTP响应中获取流式内容时,这个区别对于连接管理很重要。对于由应用程序创建而且只使用HttpClient发送的请求实体,流式和自我包含式的不同就不那么重要了。这种情况下,建议考虑如流式这种不能重复的实体,和可以重复的自我包含式实体。1.1.4.1重复实体实体可以重复,意味着它的内容可以被多次读取。这就仅仅是自我包含式的实体了(像ByteArrayEntity或Str

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功