前言
okhttp 介绍
HTTP - это способ современной сети приложений. Это то, как мы обмениваемся данными и медиа. > Выполнение HTTP эффективно делает ваш материал быстрее загружаться и экономит пропускную способность.
OKTTP - это клиент HTTP, который по умолчанию эффективен:
Поддержка HTTP/2 позволяет всем запросам на один и тот же хост делиться розеткой.
Объединение соединений уменьшает задержку запроса (если HTTP/2 недоступен).
Прозрачный GZIP сокращает размеры загрузки.
Кэширование ответа полностью избегает сети для повторных запросов.
OKTTP продолжается, когда сеть неприятна: она будет молча выздороветь от>> общих задач соединения. Если в вашей службе есть несколько IP -адресов, OKTTP будет> попытаться альтернативные адреса, если первый подключение не удастся. Это необходимо для IPv4+IPv6> и для услуг, размещенных в избыточных центрах обработки данных. OKTTP инициирует новые соединения> с современными функциями TLS (SNI, ALPN) и возвращается к TLS 1.0, если рукопожатие не удается.Использовать OKTTP легко. Его API запроса/ответа разработан со свободными строителями и неизменностью. Он поддерживает как синхронные блокирующие вызовы, так и асинхронные вызовы с обратными вызовами.
OKTTP поддерживает Android 2.3 и выше. Для Java минимальное требование составляет 1,7.摘自 摘自 https://square.github.io/okhttp/
特点
1. 支持 http 和 https 协议, api 相同, 易用;
2.http 使用线程池, https 使用多路复用;
3.Okhttp 支持同步和异步调用;
4. 支持普通 Форма 和文件上传 форма;
5. 提供了拦截器, 操作请求和响应 (日志, 请求头, тело 等);
6.ohttp 可以设置缓存;
准备工作
在 pom.xml 文件中增加以下依赖
<Depective> <groupid> com.squareup.okhttp3 </GroupId> <artifactid> okhttp </artifactid> <sersive> 3.6.0 </version> </depertion>
书写配置类
用 @configuration 注解该类 等价与 等价与 xml 中配置 бобы ;用 @bean 标注方法等价于 xml 中配置 Bean。。
@Configurationpublic class okhttpconfiguration {@bean public x509trustmanager x509trustmanager () {return new x509trustmanager () {@override public void checkclienttrusted CheckServerTrusted (x509Certificate [] x509Certificates, String S) бросает сертификат Exception {} @Override public x509Certificate [] getAcceptedIssuers () {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 (KeyManagementException e) {e.printstackTrace (); } return null; } /*** Создайте новый пул соединений с параметрами настройки, подходящими для приложения для одного пользователя. * Параметры настройки в этом пуле могут быть изменены в будущих выпусках OKTTP. В настоящее время */ @Bean Public ConnectionPool Pool () {return New ConnectionPool (200, 5, TimeUnit.minutes); } @Bean public okhttpclient okhttpclient () {return new okhttpclient.builder () .sslsocketfactory (sslsocketfactory (), x509trustmanager ()) .retryonconconcefailure (false) // 是否开启缓存. Коннекция .ReadTimeOut (10L, TimeUnit.seconds) .build (); }}工具类
自己写的工具类 , 比较简单 不是 отдых 风格
@Componentpublic class okhttputil {private static final logger logger = loggerfactory.getlogger (okhttputil.class); @Resource private okhttpclient okhttpclient; / ** * get * * @param url 请求的 url * @param Queries 请求的参数 , 在浏览器?后面的数据 , 没有可以传 null * @return */ public String get (string url, map <string> Queries) {string responsebody = ""; "; 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.enter <string, string>) iterator.next (); if (firstflag) {sb.append ("?" + entry.getKey () + "=" + entry.getValue ()); firstflag = false; } else {sb.append ("&" + entry.getKey () + "=" + entry.getValue ()); }}} Запрос запроса = новый запрос .builder () .url (sb.toString ()) .build (); Ответ ответа = null; try {response = okhttpclient.newcall (request) .execute (); int status = response.code (); if (status == 200) {return response.body (). string (); }} catch (Exception e) {logger.error ("okhttp plt urry >> ex = {}", exceptionUtils.getStackTrace (e)); } наконец {if (response! = null) {response.close (); }} return responsebode; } / ** * post * * @param url 请求的 url * @param parms form form 提交的参数 * @return * / public String post (string url, map <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)); }} Запрос запроса = новый запрос .builder () .url (url) .post (builder.build ()) .build (); Ответ ответа = null; try {response = okhttpclient.newcall (request) .execute (); int status = response.code (); if (status == 200) {return response.body (). string (); }} catch (Exception e) {logger.error ("Ошибка сообщения OKTTP >> ex = {}", exceptionUtils.getStackTrace (e)); } наконец {if (response! = null) {response.close (); }} return responsebode; } / ** * post 上传文件 * * @param url * @param params * @param filetype * @return * / public String postfile (string url, map <string, object> params, string filetype) {string response = ""; "; Multiplodbody.builder Builder = new Multipartbody.builder (); // 添加参数 if (params! = Null && params.keyset (). Size ()> 0) {for (string key: params.keyset ()) {if (params.get (key) encementOf file) {file) paary) params.get (key); builder.addformdatapart (key, file.getName (), requestbody.create (mediaType.parse (fileType), file)); продолжать; } builder.addformdatapart (key, params.get (key) .toString ()); }} Запрос запроса = новый запрос .builder () .url (url) .post (builder.build ()) .build (); Ответ ответа = null; try {response = okhttpclient.newcall (request) .execute (); int status = response.code (); if (status == 200) {return response.body (). string (); }} catch (Exception e) {logger.error ("Okhttp postfile ошибка >> ex = {}", exceptionUtils.getStackTrace (e)); } наконец {if (response! = null) {response.close (); }} return responsebode; }}使用方法
@Resourceprivate okhttputil okhttputil;
总结
以上就是这篇文章的全部内容了 , 希望本文的内容对大家的学习或者工作具有一定的参考学习价值 如果有疑问大家可以留言交流 , 谢谢大家对武林网的支持。