Httpclient4 简介

来源:互联网 发布:回收站恢复软件 编辑:程序博客网 时间:2024/05/17 03:29

1. 简介

httpclent是java中一个关于http协议的程序包 ,主要适用于java模拟浏览器使用HTTP协议进行通信,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。Http协议是互联网中一个使用最广泛的一个协议。



2. 组成

主要使用有三个部分组成。

  1. httpcomponents  core,主要是由一些低层次的组件构成,实现了Http协议的底层框架,可以用来构成客户端和服务端的http服务。支持阻塞和非阻塞I/O,同时支持java中NIO。
  2. httpcomponents client,是基于core模块构建的http agent,提供一些高级的http服务。
  3. httpcomponents asyncclient,是基于core中NIO方式实现的,用来支持大量并
在实际使用中,我们一般不直接使用core模块,而是使用httpcomponent client模块构建我们的程序。httpclient一般使用流程都是执行一个http请求,然后得到制定服务器的响应response,然后根据响应我们做出响应的处理。
一个典型的例子如下所示

CloseableHttpClient httpclient = HttpClients.createDefault();HttpGet httpget = new HttpGet("http://localhost/");CloseableHttpResponse response = httpclient.execute(httpget);try { <...>} finally { response.close();}

3. http 请求(request)

Http请求的格式如下:
<request-line><headers><blank line>[<request-body>]

在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。
在HTTP中,定义了多种请求类型,通常我们关心的只有GET请求和POST请求。只要在Web浏览器上输入一个URL,浏览器就将基于该URL向服务器发送一个GET请求,以告诉服务器获取并返回什么资源。

Httpclient可以通过BasicHttpRequestl新建一个请求,如下所示
HttpRequest request = new BasicHttpRequest("GET", "/", HttpVersion.HTTP_1_1);System.out.println(request.getRequestLine().getMethod());System.out.println(request.getRequestLine().getUri());System.out.println(request.getProtocolVersion());System.out.println(request.getRequestLine().toString());

输出
GET/HTTP/1.1GET / HTTP/1.1


HttpClient支持各种请求,GET,HEAD, POST, PUT, DELETE, TRACE and OPTIONS.。对应的各种请求方式为 HttpGet,HttpHead, HttpPost, HttpPut, HttpDelete, HttpTrace, and HttpOptions。
例如get请求方式
HttpGet httpget = new HttpGet( "http://www.google.com/search?hl=en&q=httpclient&btnG=Google+Search&aq=f&oq=");

Httpclent提供一个URIBuilder类用来构建一些需要请求的URI;如:
URI uri = new URIBuilder() .setScheme("http") .setHost("www.google.com") .setPath("/search") .setParameter("q", "httpclient") .setParameter("btnG", "Google Search") .setParameter("aq", "f") .setParameter("oq", "") .build();HttpGet httpget = new HttpGet(uri);



4. http 响应(Response)

如下所示,HTTP响应的格式与请求的格式十分类似 , 在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。:

<status-line><headers><blank line>[<response-body>]


可以用BasicHttpResponse构建一个响应。

HttpResponse response = new BasicHttpResponse(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.1 200 OK





0 0