Http Client应用场景:
Http协议是最重要的网络协议之一,目前移动端的开发、javaweb前后端分离架构,使越来越多的java应用使用http协议访问资源。Http client 大多数场景使用在多个服务之间相互调用rest api,特别是现在微服务架构的流行,使得http client的使用更加频繁。当然很多爬虫项目也使用到Http client。
Java常用的Http 客户端:
一、Java原生HttpURLConnection
二、Apache http client
三、OkHttp
四、Spring 家族 RestTemplate
各客户端详细介绍:
一、Java原生HttpURLConnection:
简介:java.net包下的原生java api提供的http请求。
使用步骤:
1、通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)。
2、设置请求的参数。
3、发送请求。
4、以输入流的形式获取返回内容。
5、关闭输入流。
Demo:
二、Apache http client:
简介:http client到目前为止最新是5.0beta版,官网地址:http://hc.apache.org/ 。Http client专为推展而设计,同时为基本http协议提供强大支持,尽管java.net包提供了通过http访问的基本功能,但是未提供许多应用程序所需要功能。
使用步骤:
1、创建HttpClient对象。
2、创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3、如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4、调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
5、调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6、释放连接。无论执行方法是否成功,都必须释放连接。
Demo:
三、OkHttp:
简介:OkHttp是一个默认有效的HTTP客户端,有效地执行HTTP可以加快您的负载并节省带宽,如果您的服务有多个IP地址,如果第一次连接失败,OkHttp将尝试备用地址。这对于IPv4 + IPv6和冗余数据中心中托管的服务是必需的。OkHttp启动具有现代TLS功能(SNI,ALPN)的新连接,并在握手失败时回退到TLS 1.0,OkHttp支持Android 2.3及更高版本。对于Java,最低要求是1.7。
操作步骤:
1、创建OkhttpClient。
2、mClient执行newCall将Request转化成一个Call。
3、最后call执行excute同步执行,enqueue异步执行。
4、Request主要通过Request.Builder来构建。
5、缓存。
6、取消请求。
Demo:
四、Spring 家族 RestTemplate:
简介:从Spring3.0开始,Spring为创建Rest API提供了良好的支持。Spring RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率,所以很多客户端比如 Android或者第三方服务商都是使用 RestTemplate 请求 restful 服务。RestTemplate有不同的版本实现,默认SimpleStreamingClientHttpRequest使用原生java http实现,HttpComponentsClientHttpRequestFactory使用apache http client实现,OkHttp3ClientHttpRequestFactory使用Okhttp实现。
操作步骤:
1、使用默认构造方法new一个实例new RestTemplate()。
2、RestTemplate 内部通过调用 doExecute 方法,首先就是获取 ClientHttpRequest。
3、RestTemplate 实现了抽象类 HttpAccessor ,所以可以调用父类的 createRequest。
4、SimpleClientHttpRequestFactory 实现了 ClientHttpRequest,同时实现方法。
5、执行 requestCallback.doWithRequest(request)。
6、执行 response = request.execute()。
7、最后解析response。
Demo:
欢迎大家留言交流。