前言
okhttp介绍
HTTPは、最新のアプリケーションネットワークです。それは私たちがデータとメディアを交換する方法です。 > HTTPを効率的に実行すると、スタッフが速くなり、帯域幅を節約できます。
okhttpは、デフォルトで効率的なHTTPクライアントです。
HTTP/2サポートにより、同じホストへのすべてのリクエストがソケットを共有できます。
接続プーリングは、要求の遅延を減らします(HTTP/2が利用できない場合)。
透明なGZIPはダウンロードサイズを縮小します。
応答キャッシュは、繰り返しリクエストのためにネットワークを完全に回避します。
okhttpは、ネットワークが面倒なときに忍耐します。>>一般的な接続の問題から静かに回復します。サービスが複数のIPアドレスがある場合、okhttp>最初の接続が失敗した場合、代替アドレスを試みます。これは、IPv4+IPv6>および冗長データセンターでホストされているサービスに必要です。 OKHTTPは、最新のTLS機能(SNI、ALPN)を使用して新しい接続を開始し、ハンドシェイクが失敗した場合はTLS 1.0に戻ります。okhttpを使用するのは簡単です。その要求/応答APIは、流fluentビルダーと不変性で設計されています。同期ブロッキングコールとコールバックを使用した非同期コールの両方をサポートします。
okhttpはAndroid 2.3以降をサポートしています。 Javaの場合、最小要件は1.7です。 - 摘自https://square.github.io/okhttp/
特点
1.支持http和https协议、api相同、易用;
2.http使用线程池、https使用多路复用;
3.OKHTTP支持同步和异步调用;
4. form form form;
5.提供了拦截器、操作请求和响应(日志、请求头、body等);
6.OKHTTP可以设置缓存;
准备工作
pom.xml文件中增加以下依赖
<Dependency> <GroupId> com.squareup.okhttp3 </groupId> <artifactid> okhttp </artifactid> <バージョン> 3.6.0 </version> </dependency>
书写配置类
@@configuration注解该类、等价与xml
@configurationPublic class okhttpconfiguration {@bean public x509trustmanager x509trustmanager(){return new x509trustmanager(){@override public void checkclienttrusted(x509certificate [] x509certificates、string s string exexceptis CheckServerTrusted(x509Certificate [] x509Certificates、string s)Strows certifativeexception {} @override public x509certificate [] getCicteDissuers(){return new X509Certificate [0]; }}; } @bean public sslsocketfactory sslsocketfactory(){try {// 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(){return new ConnectionPool(200、5、TimeUnit.minutes); } @bean public okhttpclient okhttpclient(){return new okhttpclient.builder().sslsocketfactory()、x509trustmanager()).retryonconnectionfailure(false)// timeUnit.seconds).ReadTimeout(10L、TimeUnit.seconds).build(); }}工具类
自己写的工具类、比较简单、不是休息风格
@componentpublic class okhttputil {private static final logger logger = loggerfactory.getLogger(okhttputil.class); @resource private okhttpclient okhttpclient; / ** get * * @param url stringbuffer sb = new StringBuffer(url); if(queries!= null && queries.keyset()。size()> 0){boolean firstflag = true; iterator iterator = 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; {response = okhttpclient.newcall(request).execute(); int status = response.code(); if(status == 200){return respons.body()。string(); }} catch(Exception e){logger.error( "okhttp put error >> ex = {}"、exceptionutils.getSctrace(e)); }最後に{if(response!= null){respons.close(); }} reconts responsebody; } / ** * post * * @param url formbody.builder builder = new formbody.builder(); // if(params!= null && params.keyset()。size()> 0){for(string key:params.keyset()){builder.add(key、params.get(key)); }} request request = new request .builder().url(url).post(builder.build()).build();応答応答= null; {response = okhttpclient.newcall(request).execute(); int status = response.code(); if(status == 200){return respons.body()。string(); }} catch(Exception E){logger.error( "okhttp post error >> ex = {}"、exceptionutils.getStacktrace(e)); }最後に{if(response!= null){respons.close(); }} reconts responsebody; } / ** * post上传文件 * * @param url * @param params * @param filetype * @return * / public string postfile(string url、map <string、object> params、string filetype){string responsebody = ""; multipartbody.builder builder = new MultiPartBody.Builder(); // if(params!= null && params.keyset()。size()> 0){for(string key:params.keyset()){if(paramseg(key)instanceof file){file file =(file)paramseg(key); builder.addformdatapart(key、file.getname()、requestbody.create(mediatype.parse(filetype)、file));続く; } builder.addformdatapart(key、params.get(key).tostring()); }} request request = new request .builder().url(url).post(builder.build()).build();応答応答= null; {response = okhttpclient.newcall(request).execute(); int status = response.code(); if(status == 200){return respons.body()。string(); }} catch(Exception e){logger.error( "okhttp postfile error >> ex = {}"、exceptionutils.getStacktrace(e)); }最後に{if(response!= null){respons.close(); }} reconts responsebody; }}使用方法
@resourceprivate okhttputil okhttputil;
总结
以上就是这篇文章的全部内容了、希望本文的内容对大家的学习或者工作具有一定的参考学习价值、如果有疑问大家可以留言交流、谢谢大家对武林网的支持。