前言
Okhttp 介绍
HTTP ist die Art und Weise, wie das moderne Anwendungsnetzwerk. So tauschen wir Daten und Medien aus. > Wenn Sie HTTP effizient durchführen, laden Sie Ihre Sachen schneller und erspart die Bandbreite.
OKHTTP ist ein HTTP -Client, der standardmäßig effizient ist:
Mit HTTP/2 -Support können alle Anforderungen desselben Hosts einen Socket teilen.
Das Verbindungspooling reduziert die Anforderungslatenz (wenn HTTP/2 nicht verfügbar ist).
Transparent GZIP Schrumpfe Download -Größen.
Response Caching vermeidet das Netzwerk vollständig für Wiederholungsanforderungen.
OKHTTP behält sich durch, wenn das Netzwerk problematisch ist: Es wird sich stillschweigend von >> gemeinsamen Verbindungsproblemen erholen. Wenn Ihr Dienst über mehrere IP -Adressen verfügt, wird OKHTTP> alternative Adressen versucht, wenn die erste Verbindung fehlschlägt. Dies ist für IPv4+IPv6> und für Dienste erforderlich, die in redundanten Rechenzentren gehostet werden. OKHTTP initiiert neue Verbindungen> mit modernen TLS -Funktionen (SNI, ALPN) und fällt auf TLS 1.0 zurück, wenn der Händedruck fehlschlägt.Die Verwendung von OKHTTP ist einfach. Die Anfrage/Antwort -API wurde mit fließenden Bauherren und Unveränderlichkeit entwickelt. Es unterstützt sowohl synchrone Blockierungsanrufe als auch asynchronisierte Anrufe mit Rückrufen.
OKHTTP unterstützt Android 2.3 und höher. Für Java beträgt die Mindestanforderung 1,7. - 摘自 https://square.github.io/okhttp/
特点
1. 支持 http 和 https 协议, api 相同, 易用;
2.http 使用线程池, https 使用多路复用;
3.okhttp 支持同步和异步调用;
4. 支持普通 Form 和文件上传 Form;
5. 提供了拦截器, 操作请求和响应 (日志, 请求头, Körper 等);
6.OKHTTP 可以设置缓存;
准备工作
在 pom.xml 文件中增加以下依赖
<Depopenty> <gruppe> com.squareup.okhttp3 </Groupid> <artifactId> Okhttp </artifactId> <version> 3.6.0 </Version> </abhängig>
书写配置类
用 @Configuration 注解该类 , 等价与 xml 中配置 Beans ;用 @bean 标注方法等价于 xml 中配置 Bean。
@ConfigurationPublic Class OkhttpConfiguration {@Bean public x509Trustmanager x509Trustmanager () {Neue X509Trustmanager () {@Override public void void checkClientTrusted (x509Certificate [] x509Certificate, String), die zertifiziert {{{{} @overrede void Void -Void -Void -Void -Void -Void -Void -Void -Zertifikat CheckServertrusted (x509Certificate [] x509Certificate, String s) löst CertificateException {} @Override public x509Certificate [] getAcceptedISSUERS () {neuer X509certificate [0] zurück; }}; } @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; } /*** Erstellen Sie einen neuen Verbindungspool mit Tuning-Parametern, die für eine Einzelbenutzeranwendung geeignet sind. * Die Tuning -Parameter in diesem Pool können sich in zukünftigen OKHTTP -Veröffentlichungen ändern. Derzeit */ @bean public ConnectionPool pool () {neuer ConnectionPool (200, 5, TimeUnit.Minutes); } @Bean public Okhttpclient Okhttpclient () {return New Okhttpclient.builder () .SlsocketFactory (SSLSOCKETFACTORY (), x509TrustManager () .retryonConnectionFailure (false) // 是否开启缓存. TimeUnit.seconds) .ReadTimeout (10L, TimeUnit.seconds) .build (); }}工具类
自己写的工具类 , 比较简单 , 不是 Rest 风格
@ComponentPublic Class Okhttputil {private statische logger logger = loggerfactory.getLogger (okhttputil.class); @Resource private Okhttpclient Okhttpclient; / ** * GET * * @PARAM URL 请求的 URL * @PARAM -Abfragen 请求的参数 , 在浏览器?后面的数据 , 没有可以传 null * @return */ public String get (String url, map <string, String> Abfragen) {String responseBody = ""; StringBuffer sb = new StringBuffer (URL); if (Abfragen! Iterator iterator = queries.EntrySet (). Iterator (); while (iterator.hasNext ()) {map.Entry -Eintrag = (Map.Entry <String, String>) iterator.next (); if (firstFlag) {sb.append ("?" + Eintrag.getkey () + "=" + Eintrag.getValue ()); FirstFlag = false; } else {sb.append ("&" + Eintrag.getkey () + "=" + Eintrag.getValue ()); }}} Request request = new request .builder () .url (sb.toString ()) .build (); Antwortantwort = NULL; try {response = okhttpclient.newcall (request) .execute (); int status = response.code (); if (status == 200) {return response.body (). string (); }} catch (exception e) {logger.Error ("Okhttp Put Error >> ex = {}", exceptionutils.getStacktrace (e)); } endlich {if (response! = null) {response.close (); }} return responseBody; } / ** * post * * @param url 请求的 url * @param params post Formular 提交的参数 * @return * / public String post (String url, map <string> params) {String responseBody = ""; FormBody.builder Builder = New FormBody.builder (); // 添加参数 if (params! = Null && params.keyset (). Size ()> 0) {für (String -Schlüssel: params.keyset ()) {builder.add (Schlüssel, params.get (Schlüssel)); }} Request request = new request .builder () .url (url) .post (builder.build ()) .build (); Antwortantwort = NULL; try {response = okhttpclient.newcall (request) .execute (); int status = response.code (); if (status == 200) {return response.body (). string (); }} catch (exception e) {logger.Error ("Okhttp -Fehler >> ex = {}", exceptionutils.getStacktrace (e)); } endlich {if (response! = null) {response.close (); }} return responseBody; } / ** * post 上传文件 * * @param url * @param params * @param fileType * @return * / public String postfile (String -URL, MAP <String, Objekt> Params, String Filetype) {String ResponseBody = ""; MultipartBody.builder Builder = new MultipartBody.builder (); // 添加参数 if (params! = Null && params.keyset (). Size ()> 0) {für (String -Schlüssel: params.keyset ()) {if (params.get (Schlüssel) Instanzdatei) {Datei Datei = (Datei) params.get (Schlüssel); Builder.AddFormDatApart (Schlüssel, Datei.getName (), RequestBody.Create (Mediitype.Parse (Filetype), Datei)); weitermachen; } builder.addFormDatApart (Schlüssel, params.get (Schlüssel) .ToString ()); }} Request request = new request .builder () .url (url) .post (builder.build ()) .build (); Antwortantwort = 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 -Fehler >> ex = {}", exceptionUtils.getStacktrace (e)); } endlich {if (response! = null) {response.close (); }} return responseBody; }}使用方法
@ResourcePrivate Okhttputil Okhttputil;
总结
以上就是这篇文章的全部内容了 , 希望本文的内容对大家的学习或者工作具有一定的参考学习价值 , 如果有疑问大家可以留言交流 , 谢谢大家对武林网的支持。 谢谢大家对武林网的支持。