前言
OKHTTP介绍
HTTP是现代应用程序网络的方式。这就是我们交换数据和媒体的方式。 >有效地做HTTP可以使您的东西更快地负载并节省带宽。
OKHTTP是HTTP客户端,默认情况下是有效的:
HTTP/2支持允许所有请求到同一主机共享套接字。
连接池减少请求延迟(如果没有HTTP/2)。
透明的GZIP缩小下载尺寸。
响应缓存可以完全避免网络以获得重复请求。
当网络麻烦时,OKHTTP坚持不懈:它将从>>公共连接问题中静静地恢复。如果您的服务有多个IP地址,则OKHTTP将>如果第一个连接失败,请尝试替代地址。这对于IPv4+IPv6>以及在冗余数据中心中托管的服务是必需的。 OKHTTP启动新的连接>具有现代TLS功能(SNI,ALPN),如果握手失败,则降至TLS 1.0。使用OKHTTP很容易。它的请求/响应API设计具有流利的构建器和不变性。它支持带回调的同步封锁调用和异步调用。
OKHTTP支持Android 2.3及以上。对于Java,最小要求为1.7。 - 摘自https://square.github.io/okhttp/
特点
1. HTTP和https协议,API相同,易用;
2.http使用线程池,https使用多路复用;
3.okhttp支持同步和异步调用;
4.支持普通形式和文件上传形式;
5.提供了拦截器,操作请求和响应(日志,请求头,身体等);
6.okhttp可以设置缓存;
准备工作
在pom.xml文件中增加以下依赖
<dependency> <groupId> com.squareup.okhttp3 </groupid> <ARTIFACTID> okhttp </artifactid> </artifactid> <版本> 3.6.0 </version>
书写配置类
用@configuration注解该类,等价与xml beans@bean@bean标注方法等价于xml bean。bean。
@ConfigurationPublic类OKHTTPCONFIGURATION {@BEAN PUBLIC X509TRUSTMANAGER X509TRUSTMANAGER(){返回新的X509TRUSTMANAGER(){@Override public void CheckClientTrusted(x509certificate [x509certificate [x509certificate [] x509certificate [] x509certificateS publical string exterty exterception exters experts scept ofertion sception { checkServerTrusted(x509certificate [] x509certificates,string s)抛出证书exception {} @Override public x509certificate [] getAcceptedissuers(){返回新的x509certificate [0]; }}; } @bean public sslsocketFactory sslsocketFactory(){尝试{//信任任何链接sslContext sslContext = sslContext.getInstance(“ tls”); sslContext.Init(null,new Trustmanager [] {X509TRUSTMANAGER()},new SecureRandom());返回sslContext.getSocketFactory(); } catch(nosuchalgorithmexception e){e.printstacktrace(); } catch(keyManagementException e){e.printstacktrace(); }返回null; } /***创建一个新的连接池,其中使用适用于单用户应用程序的调整参数。 *此池中的调整参数可能会在未来的OKHTTP版本中更改。当前 */ @bean public ConnectionPool pool(){返回New ConnectionPool(200,5,TimeUnit.minutes); } @bean public OkhttpClient OkhttpClient(){返回新的OKHTTPCLIENT.BUILDER().sslsocketFactory(sslsocketFactory(),x509trustmanager(),x509trustmanager().retryryonConnectionFailure() timeunit.seconds).ReadTimeOut(10L,TimeUnit.seconds).build(); }}}工具类
自己写的工具类,比较简单,不是休息
@componentPublic类OKHTTPUTIL {private static final logger logger = loggerfactory.getLogger(okhtttputil.class); @Resource private okhttpclient okhttpclient; / ** * get * * @param url请求的url * @param查询请求的参数,在浏览器?后面的数据StringBuffer SB = new StringBuffer(url); if(queries!= null && queries.keyset()。size()> 0){boolean firstflag = true;迭代器迭代器= queries.entryset()。iterator(); while(iterator.hasnext()){map.entry entry =(map.entry <string,string>)iterator.next(); if(firstFlag){sb.append(“?” + entry.getKey() +“ =” + entry.getValue()); firstflag = false; } else {sb.append(“&” + entry.getKey() +“ =” + entry.getValue()); }}}} request request = new request .builder().url(sb.toString()).build();响应响应= null;尝试{wendesp = okhttpclient.newcall(request).execute(); int status = wendesp.code(); if(status == 200){返回响应。Body.body()。string(); }} catch(异常e){logger.error(“ okhttp put错误>> ex = {}”,exceptionutils.getStackTrace(e)); }最后{if(wiss!= null){response.close(); }}返回响应body; } / ** * post * * @param URL请求的url * @param params port forp form form @return * / public string port(字符串url,map <string,string,string> params){strign responsebody =“”; formbody.builder Builder = new FormBody.Builder(); //添加参数如果(params!= null && params.keyset()。size()> 0){for(string键:params.keyset()){builder.add(key,params.get(key)); }}请求request = new request .builder().url(url).post(builder.build()).build();响应响应= null;尝试{wendesp = okhttpclient.newcall(request).execute(); int status = wendesp.code(); if(status == 200){返回响应。Body.body()。string(); }} catch(异常e){logger.error(“ okhttp post error >> ex = {}”,exceptionutils.getStackTrace(e)); }最后{if(wiss!= null){response.close(); }}返回响应body; } / ** * post上传文件 * * @param url * @param params * @param filetype * @return * @return * / public string postfile(字符串url,map <string,object> params,params,string filetype){string response vernessbody =“”; multipartbody.builder Builder = new Multipartbody.builder(); //添加参数if(params!= null && params.keyset()。size()> 0){for(string键:params.keyset()){if(params.get(params.get(key)instanceof file){file file file =(file)params.get(paramse)params.get(key); builder.addformDatapart(key,file.getName(),requestbody.create(mediatype.parse(filetype),file)));继续; } builder.addformDatapart(key,params.get(key).toString()); }}请求request = new request .builder().url(url).post(builder.build()).build();响应响应= null;尝试{wendesp = okhttpclient.newcall(request).execute(); int status = wendesp.code(); if(status == 200){返回响应。Body.body()。string(); }} catch(异常e){logger.error(“ okhttp postfile错误>> ex = {}”,exceptionutils.getStackTrace(e)); }最后{if(wiss!= null){response.close(); }}返回响应body; }}}使用方法
@Resourceprivate Okhttputil Okhttputil;
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对武林网的支持。,谢谢大家对武林网的支持。