前言
okhttp 介绍
HTTP est la façon dont le réseau d'applications modernes. C'est ainsi que nous échangeons des données et des médias. > Faire HTTP facilite efficacement vos affaires plus rapidement et économise la bande passante.
OKHTTP est un client HTTP qui est efficace par défaut:
La prise en charge HTTP / 2 permet à toutes les demandes du même hôte de partager une prise.
Le regroupement de connexion réduit la latence des demandes (si HTTP / 2 n'est pas disponible).
Les tailles de téléchargement de téléchargement rétractable GZIP transparent.
La mise en cache de réponse évite complètement le réseau pour les demandes de répétition.
OKHTTP persévère lorsque le réseau est gênant: il se remet en silence de >> des problèmes de connexion communs. Si votre service dispose de plusieurs adresses IP OKHTTP> tentera des adresses alternatives si la première connexion échoue. Ceci est nécessaire pour IPv4 + IPv6> et pour les services hébergés dans les centres de données redondants. OKHTTP initie de nouvelles connexions> avec les fonctionnalités TLS modernes (SNI, ALPN) et retombe à TLS 1.0 si la poignée de main échoue.L'utilisation d'OKHTTP est facile. Son API de demande / réponse est conçue avec les constructeurs courants et l'immuabilité. Il prend en charge les appels de blocage synchrones et les appels asynchrones avec des rappels.
OKHTTP prend en charge Android 2.3 et plus. Pour Java, l'exigence minimale est de 1,7. - 摘自 https://square.github.io/okhttp/
特点
1. 支持 http 和 https 协议, api 相同, 易用;
2.http 使用线程池, https 使用多路复用;
3.Okhttp 支持同步和异步调用;
4. 支持普通 Forme 和文件上传 Forme;
5. 提供了拦截器, 操作请求和响应 (日志, 请求头, corps 等);
6.Okhttp 可以设置缓存;
准备工作
在 pom.xml 文件中增加以下依赖
<dependency> <proupId> com.squareup.okhttp3 </rompuprid> <ArtifActid> okhttp </refactId> <version> 3.6.0 </ version> </dependency>
书写配置类
用 @configuration 注解该类 , 等价与 XML 中配置 Beans ;用 @Bean 标注方法等价于 Xml 中配置 Bean。
@ConfigurationPublic class okhttpconfiguration {@bean public x509trustManager x509TrustManager () {return new x509TrustManager () {@Override public Void CheckClientTruted (x509Certificate [] x509Certificats, String S) Throws CertificateException {@verride vocde CheckServerTruted (x509Certificate [] x509Certificates, String S) lève CertificateException {} @Override public x509Certificate [] getAcceptEdSisuers () {return new x509certificate [0]; }}; } @Bean public sslsocketfactory sslsocketfactory () {try {// 信任任何链接 sslContext sslContext = sslContext.getInstance ("tls"); sslContext.init (null, new TrustManager [] {x509TrustManager ()}, new SecureRandom ()); return sslcontext.getsocketfactory (); } catch (NosuchalgorithMexception e) {e.printStackTrace (); } catch (keymanagementxception e) {e.printStackTrace (); } return null; } / ** * Créez un nouveau pool de connexion avec des paramètres de réglage appropriés pour une application à utilisateur unique. * Les paramètres de réglage de ce pool sont sujets à un changement dans les futures versions OKHTTP. Actuellement * / @Bean Public ConnectionPool Pool () {return new ConnectionPool (200, 5, timeUnit.Minutes); } @Bean public okhttpclient okhttpclient () {return new okhttpclient.builder () .sslsocketfactory (sslSocketFactory (), x509TrustManager ()) .retryConnectionFailure (false) // 是否开启缓存 .ConnectionPool (Pool ()) //. TimeUnit.seconds) .readTimeout (10L, timeunit.seconds) .build (); }}工具类
自己写的工具类 , 比较简单 , 不是 repos 风格
@ComponentPublic classe OKHTTPUTIL {private static final logger = loggerfactory.getLogger (okhttputil.class); @Resource privé okhttpclient okhttpclient; / ** * get * * @param url 请求的 url * @param requêtes 请求的参数 , 在浏览器?后面的数据 , 没有可以传 null * @return * / public String get (string url, map <string, string> requêtes) {string réponsebody = ""; StringBuffer sb = new StringBuffer (URL); if (quelles! = null && redes.KeySet (). size ()> 0) {boolean firstFlag = true; Iterator iterator = redes.entryset (). Iterator (); while (iterator.hasnext ()) {map.entry entrée = (map.entry <string, string>) iterator.next (); if (firstFlag) {sb.append ("?" + entry.getKey () + "=" + entry.getValue ()); FirstFlag = false; } else {sb.append ("&" + entry.getKey () + "=" + entry.getValue ()); }}} Request demande = new request .builder () .url (sb.toString ()) .build (); Réponse réponse = null; essayez {réponse = okhttpclient.newCall (request) .ExECUTE (); int status = réponse.code (); if (status == 200) {return réponse.body (). String (); }} catch (exception e) {Logger.Error ("OKHTTP Put Error >> EX = {}", exceptionUtils.getStackTrace (E)); } enfin {if (réponse! = null) {réponse.close (); }} return réponsebody; } / ** * POST * * @param URL 请求的 URL * @param Params Post Form 提交的参数 * @return * / public String Post (String URL, map <String, String> Params) {String ResponseBody = ""; 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 demande = new request .builder () .url (url) .post (builder.build ()) .build (); Réponse réponse = null; essayez {réponse = okhttpclient.newCall (request) .ExECUTE (); int status = réponse.code (); if (status == 200) {return réponse.body (). String (); }} catch (exception e) {Logger.Error ("OKHTTP POST ERROR >> EX = {}", exceptionUtils.getStackTrace (e)); } enfin {if (réponse! = null) {réponse.close (); }} return réponsebody; } / ** * Post 上传文件 * * @param url * @param params * @param fileType * @return * / public String postfile (String url, map <string, object> params, string fileType) {string réponsebody = ""; MultipartBody.builder builder = new multipartBody.builder (); // 添加参数 if (params! = Null && params.KeySet (). Size ()> 0) {for (string key: params.KeySet ()) {if (params.get (key) instanceof file) {file file = (file) params.get (key); builder.adddformDatapart (key, file.getName (), requestbody.create (mediaType.parse (fileType), fichier)); continuer; } builder.addformDatapart (key, params.get (key) .toString ()); }} Request demande = new request .builder () .url (url) .post (builder.build ()) .build (); Réponse réponse = null; essayez {réponse = okhttpclient.newCall (request) .ExECUTE (); int status = réponse.code (); if (status == 200) {return réponse.body (). String (); }} catch (exception e) {Logger.Error ("OKHTTP POSTFILE ERROR >> EX = {}", exceptionUtils.getStackTrace (e)); } enfin {if (réponse! = null) {réponse.close (); }} return réponsebody; }}使用方法
@ResourcePrivate OKHTTPUTIL OKHTTPUTIL;
总结
以上就是这篇文章的全部内容了 , 希望本文的内容对大家的学习或者工作具有一定的参考学习价值 , 如果有疑问大家可以留言交流 , 谢谢大家对武林网的支持。