ImageVerifierCode 换一换
格式:DOCX , 页数:49 ,大小:48.90KB ,
资源ID:10533995      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10533995.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(httpclient4 中文版帮助文档.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

httpclient4 中文版帮助文档.docx

1、httpclient4 中文版帮助文档httpclient4 中文版帮助文档,最新官方版翻译版前言超文本传输协议(HTTP)也许是当今互联网上使用的最重要的协议了。Web服务,有网络功能的设备和网络计算的发展,都持续扩展了HTTP协议的角色,超越了用户使用的Web浏览器范畴,同时,也增加了需要HTTP协议支持的应用程序的数量。尽管包提供了基本通过HTTP访问资源的功能,但它没有提供全面的灵活性和其它很多应用程序需要的功能。HttpClient就是寻求弥补这项空白的组件,通过提供一个有效的,保持更新的,功能丰富的软件包来实现客户端最新的HTTP标准和建议。为扩展而设计,同时为基本的HTTP协议提

2、供强大的支持,HttpClient组件也许就是构建HTTP客户端应用程序,比如web浏览器,web服务端,利用或扩展HTTP协议进行分布式通信的系统的开发人员的关注点。1. HttpClient的范围基于HttpCorehttp:/hc.apache.org/httpcomponents-core/index.html的客户端HTTP运输实现库基于经典(阻塞)I/O内容无关2. 什么是HttpClient不能做的HttpClient 不是一个浏览器。它是一个客户端的HTTP通信实现库。HttpClient的目标是发送和接收HTTP报文。HttpClient不会去缓存内容,执行 嵌入在HTML页

3、面中的javascript代码,猜测内容类型,重新格式化请求/重定向URI,或者其它和HTTP运输无关的功能。第一章 基础1.1 执行请求 HttpClient 最重要的功能是执行HTTP方法。一个HTTP方法的执行包含一个或多个HTTP请求/HTTP响应交换,通常由HttpClient的内部来处理。而期望用户提供一个要执行的请求对象,而HttpClient期望传输请求到目标服务器并返回对应的响应对象,或者当执行不成功时抛出异常。很自然地,HttpClient API的主要切入点就是定义描述上述规约的HttpClient接口。这里有一个很简单的请求执行过程的示例:HttpClient http

4、client = new DefaultHttpClient();HttpGet httpget = new HttpGet(http:/localhost/);HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();if (entity != null) InputStream instream = entity.getContent();int l;byte tmp = new byte2048;while (l = instream.read(tmp) !=

5、-1) 1.1.1 HTTP请求所有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包含一个协议模式,主机名称,可选的端口,资源路径,可选的查询和可选的片段。HttpGet

6、 httpget = new HttpGet(HttpClient提供很多工具方法来简化创建和修改执行URI。URI也可以编程来拼装:URI uri = URIUtils.createURI(http, , -1, /search,q=httpclient&btnG=Google+Search&aq=f&oq=, null);HttpGet httpget = new HttpGet(uri);System.out.println(httpget.getURI();输出内容为:查询字符串也可以从独立的参数中来生成:List qparams = new ArrayList();qparams.a

7、dd(new BasicNameValuePair(q, httpclient);qparams.add(new BasicNameValuePair(btnG, Google Search);qparams.add(new BasicNameValuePair(aq, f);qparams.add(new BasicNameValuePair(oq, null);URI uri = URIUtils.createURI(http, , -1, /search,URLEncodedUtils.format(qparams, UTF-8), null);HttpGet httpget = new

8、 HttpGet(uri);System.out.println(httpget.getURI();输出内容为:1.1.2 HTTP响应HTTP响应是由服务器在接收和解释请求报文之后返回发送给客户端的报文。响应报文的第一行包含了协议版本,之后是数字状态码和相关联的文本段。HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK, OK);System.out.println(response.getProtocolVersion();System.out.println(respons

9、e.getStatusLine().getStatusCode();System.out.println(response.getStatusLine().getReasonPhrase();System.out.println(response.getStatusLine().toString();输出内容为:HTTP/1.1200OKHTTP/1.1 200 OK1.1.3 处理报文头部一个HTTP报文可以包含很多描述如内容长度,内容类型等信息属性的头部信息。HttpClient提供获取,添加,移除和枚举头部信息的方法。HttpResponse response = new BasicHt

10、tpResponse(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);Header h1 = response.getFirstHeader(Set-Cookie);System.out.println(h1);Header h2 = response.getLastHeader(Set-Cookie

11、);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接口。HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1

12、,HttpStatus.SC_OK, OK);response.addHeader(Set-Cookie,c1=a; path=/; domain=localhost);response.addHeader(Set-Cookie,c2=b; path=/, c3=c; domain=localhost);HeaderIterator it = response.headerIterator(Set-Cookie);while (it.hasNext() System.out.println(it.next();输出内容为:Set-Cookie: c1=a; path=/; domain=loc

13、alhostSet-Cookie: c2=b; path=/, c3=c; domain=localhost它也提供解析HTTP报文到独立头部信息元素的方法方法。HttpResponse response = new BasicHttpResponse(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);

14、HeaderElementIterator it = new BasicHeaderElementIterator(response.headerIterator(Set-Cookie);while (it.hasNext() HeaderElement elem = it.nextElement();System.out.println(elem.getName() + = + elem.getValue();NameValuePair params = elem.getParameters();for (int i = 0; i params.length; i+) System.out.

15、println( + paramsi);输出内容为:c1 = apath=/domain=localhostc2 = bpath=/c3 = cdomain=localhost1.1.4 HTTP实体HTTP 报文可以携带和请求或响应相关的内容实体。实体可以在一些请求和响应中找到,因为它们也是可选的。使用了实体的请求被称为封闭实体请求。HTTP规范定义 了两种封闭实体的方法:POST和PUT。响应通常期望包含一个内容实体。这个规则也有特例,比如HEAD方法的响应和204 No Content,304 Not Modified和205 Reset Content响应。HttpClient根据其内

16、容出自何处区分三种类型的实体:streamed流式:内容从流中获得,或者在运行中产生。特别是这种分类包含从HTTP响应中获取的实体。流式实体是不可重复生成的。self-contained自我包含式:内容在内存中或通过独立的连接或其它实体中获得。自我包含式的实体是可以重复生成的。这种类型的实体会经常用于封闭HTTP请求的实体。wrapping包装式:内容从另外一个实体中获得。当从一个HTTP响应中获取流式内容时,这个区别对于连接管理很重要。对于由应用程序创建而且只使用HttpClient发送的请求实体,流式和自我包含式的不同就不那么重要了。这种情况下,建议考虑如流式这种不能重复的实体,和可以重复

17、的自我包含式实体。1.1.4.1 重复实体实体可以重复,意味着它的内容可以被多次读取。这就仅仅是自我包含式的实体了(像ByteArrayEntity或StringEntity)。1.1.4.2 使用HTTP实体因为一个实体既可以代表二进制内容又可以代表字符内容,它也支持字符编码(支持后者也就是字符内容)。实体是当使用封闭内容执行请求,或当请求已经成功执行,或当响应体结果发功到客户端时创建的。要 从实体中读取内容,可以通过HttpEntity#getContent()方法从输入流中获取,这会返回一个java.io.InputStream对 象,或者提供一个输出流到HttpEntity#write

18、To(OutputStream)方法中,这会一次返回所有写入到给定流中的内容。当 实体通过一个收到的报文获取时,HttpEntity#getContentType()方法和 HttpEntity#getContentLength()方法可以用来读取通用的元数据,如Content-Type和Content-Length 头部信息(如果它们是可用的)。因为头部信息Content-Type可以包含对文本MIME类型的字符编码,比如text/plain或text /html,HttpEntity#getContentEncoding()方法用来读取这个信息。如果头部信息不可用,那么就返回长度-1,而对

19、于内 容类型返回NULL。如果头部信息Content-Type是可用的,那么就会返回一个Header对象。当为一个传出报文创建实体时,这个元数据不得不通过实体创建器来提供。StringEntity myEntity = new StringEntity(important message,UTF-8);System.out.println(myEntity.getContentType();System.out.println(myEntity.getContentLength();System.out.println(EntityUtils.getContentCharSet(myEntit

20、y);System.out.println(EntityUtils.toString(myEntity);System.out.println(EntityUtils.toByteArray(myEntity).length);输出内容为Content-Type: text/plain; charset=UTF-817UTF-8important message171.1.5 确保低级别资源释放当 完成一个响应实体,那么保证所有实体内容已经被完全消耗是很重要的,所以连接可以安全的放回到连接池中,而且可以通过连接管理器对后续的请求重用连接。处 理这个操作的最方便的方法是调用HttpEntity#

21、consumeContent()方法来消耗流中的任意可用内容。HttpClient探测到内容 流尾部已经到达后,会立即会自动释放低层连接,并放回到连接管理器。HttpEntity#consumeContent()方法调用多次也是安全的。也可能会有特殊情况,当整个响应内容的一小部分需要获取,消耗剩余内容而损失性能,还有重用连接的代价太高,则可以仅仅通过调用HttpUriRequest#abort()方法来中止请求。HttpGet httpget = new HttpGet(http:/localhost/);HttpResponse response = httpclient.execute(h

22、ttpget);HttpEntity entity = response.getEntity();if (entity != null) InputStream instream = entity.getContent();int byteOne = instream.read();int byteTwo = instream.read();/ Do not need the resthttpget.abort();连接不会被重用,但是由它持有的所有级别的资源将会被正确释放。1.1.6 消耗实体内容推 荐消耗实体内容的方式是使用它的HttpEntity#getContent()或HttpEnt

23、ity#writeTo(OutputStream)方 法。HttpClient也自带EntityUtils类,这会暴露出一些静态方法,这些方法可以更加容易地从实体中读取内容或信息。代替直接读取 java.io.InputStream,也可以使用这个类中的方法以字符串/字节数组的形式获取整个内容体。然而,EntityUtils的使用是强烈 不鼓励的,除非响应实体源自可靠的HTTP服务器和已知的长度限制。HttpGet httpget = new HttpGet(http:/localhost/);HttpResponse response = httpclient.execute(httpget

24、);HttpEntity entity = response.getEntity();if (entity != null) long len = entity.getContentLength();if (len != -1 & len 2048) System.out.println(EntityUtils.toString(entity); else / Stream content out在一些情况下可能会不止一次的读取实体。此时实体内容必须以某种方式在内存或磁盘上被缓冲起来。最简单的方法是通过使用BufferedHttpEntity类来包装源实体完成。这会引起源实体内容被读取到内存的

25、缓冲区中。在其它所有方式中,实体包装器将会得到源实体。HttpGet httpget = new HttpGet(http:/localhost/);HttpResponse response = httpclient.execute(httpget);HttpEntity entity = response.getEntity();if (entity != null) entity = new BufferedHttpEntity(entity);1.1.7 生成实体内容HttpClient 提供一些类,它们可以用于生成通过HTTP连接获得内容的有效输出流。为了封闭实体从HTTP请求中获得

26、的输出内容,那些类的实例可以和封闭如POST和 PUT请求的实体相关联。HttpClient为很多公用的数据容器,比如字符串,字节数组,输入流和文件提供了一些 类:StringEntity,ByteArrayEntity,InputStreamEntity和FileEntity。File file = new File(somefile.txt);FileEntity entity = new FileEntity(file, text/plain; charset=UTF-8);HttpPost httppost = new HttpPost(http:/localhost/action.d

27、o);httppost.setEntity(entity);请 注意InputStreamEntity是不可重复的,因为它仅仅能从低层数据流中读取一次内容。通常来说,我们推荐实现一个定制的HttpEntity 类,这是自我包含式的,用来代替使用通用的InputStreamEntity。FileEntity也是一个很好的起点。1.1.7.1 动态内容实体通 常来说,HTTP实体需要基于特定的执行上下文来动态地生成。通过使用EntityTemplate实体类和ContentProducer接 口,HttpClient提供了动态实体的支持。内容生成器是按照需求生成它们内容的对象,将它们写入到一个输出

28、流中。它们是每次被请求时来生成内容。所 以用EntityTemplate创建的实体通常是自我包含而且可以重复的。ContentProducer cp = new ContentProducer() public void writeTo(OutputStream outstream) throws IOException Writer writer = new OutputStreamWriter(outstream, UTF-8);writer.write();writer.write( );writer.write( important stuff);writer.write( );wri

29、ter.write();writer.flush();HttpEntity entity = new EntityTemplate(cp);HttpPost httppost = new HttpPost(http:/localhost/handler.do);httppost.setEntity(entity);1.1.7.2 HTML表单许多应用程序需要频繁模拟提交一个HTML表单的过程,比如,为了来记录一个Web应用程序或提交输出数据。HttpClient提供了特殊的实体类UrlEncodedFormEntity来这个满足过程。List formparams = new ArrayList();formparams.add(new BasicNameValuePair(param1, value1);formparams.add(new BasicNameValuePair(param2, value2);UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, UTF-8);HttpPost httppost = new HttpPost(http:/localhost/handler.do);

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2