前言
Okhttp 介绍
HTTP هي الطريقة التي شبكة التطبيقات الحديثة. هذه هي الطريقة التي نتبادل بها البيانات والوسائط. > القيام HTTP بكفاءة يجعل الأشياء الخاصة بك يتم تحميلها بشكل أسرع وتوفر عرض النطاق الترددي.
OKHTTP هو عميل HTTP الذي يكون فعليًا بشكل افتراضي:
يتيح دعم HTTP/2 جميع الطلبات لنفس المضيف لمشاركة مأخذ التوصيل.
تجميع الاتصال يقلل من زمن انتقال الطلب (إذا لم يكن HTTP/2 متاحًا).
GZIP شفافة تقلص أحجام تنزيل.
يتجنب التخزين المؤقت للاستجابة الشبكة تمامًا لطلبات التكرار.
يثابر OKHTTP عندما تكون الشبكة مزعجة: ستتعافى بصمت من>> مشاكل الاتصال الشائعة. إذا كانت خدمتك تحتوي على عناوين IP متعددة ، فسيحاول OKHTTP محاولة عناوين بديلة في حالة فشل الاتصال الأول. هذا ضروري ل IPv4+IPv6> وللخدمات المستضافة في مراكز البيانات الزائدة. يبدأ OKHTTP اتصالات جديدة> مع ميزات TLS الحديثة (SNI ، ALPN) ، وتتراجع إلى TLS 1.0 في حالة فشل المصافحة.باستخدام OKHTTP سهل. تم تصميم واجهة برمجة تطبيقات طلبها/الاستجابة مع بناة بطلاقة وسهولة الثبات. وهو يدعم كلاً من مكالمات الحظر المتزامنة ومكالمات Async مع عمليات الاسترجاعات.
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 文件中增加以下依赖
<Rependency> <roupend> com.squareup.okhttp3 </roughid> <artifactid> okhttp </stifactid> <الإصدار> 3.6.0 </version> </dependency>
书写配置类
用configuration 注解该类 , 等价与 xml 中配置 beans ;用 bean 标注方法等价于 xml 中配置 bean。
ConfigurationPublic Class OKHTTPConfiguration {bean public x509TRUSTMANAGER X509TRUSTMONAGER () {return New X509TRUSTMANAGER () CheckServerTrusted (x509certificate [] x509certificates ، سلسلة S) يلقي CertificateException {} 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 ()) ؛ إرجاع sslContext.getSocketFactory () ؛ } catch (nosuchalgorithMexception e) {e.printstacktrace () ؛ } catch (keyManagementException e) {e.printStackTrace () ؛ } إرجاع فارغ ؛ } /*** قم بإنشاء تجمع اتصال جديد مع معلمات ضبط مناسبة لتطبيق المستخدم الواحد. * تخضع معلمات التوليف في هذا التجمع للتغيير في إصدارات OKHTTP المستقبلية. حاليًا */ bean public connectionpool pool () {return new ConnectionPool (200 ، 5 ، timeUnit.minutes) ؛ } bean public okhttpclient okhttpclient () {return new okhttpclient.builder () .sslsocketfactory (sslsocketfactory () ، x509trustmanager () .retryonconnectionfailure (false) // 是否开启缓存 .connectionpool (() timeUnit.Seconds) .ReadTimeout (10L ، timeUnit.Seconds) .Build () ؛ }}工具类
自己写的工具类 , 比较简单 , 不是 rest 风格
componentpublic class okhttputil {private static final logger = loggerFactory.getLogger (Okhttputil.class) ؛ Resource الخاص OKHTTPCLIENT OKHTTPCLIENT ؛ / ** * GET * * url url 请求的 请求的 url * param queries 请求的参数 , 在浏览器?后面的数据 , 没有可以传 null * regurn */ public string get (url url ، map <string ، string> Queries) {String ResponseBody = "" ؛ StringBuffer SB = New StringBuffer (url) ؛ if (Queries! = null && Queries.KeySet (). size ()> 0) {boolean firstflag = true ؛ iterator iterator = Queries.EntrySet (). iterator () ؛ بينما (iterator.hasnext ()) {map.entry entry = (map.entry <string ، string>) iterator.next () ؛ if (firstflag) {sb.append ("؟" + entry.getKey () + "=" + entry.getValue ()) ؛ firstflag = false ؛ } else {sb.append ("&" + enter.getKey () + "=" + entry.getValue ()) ؛ }}} طلب طلب = طلب جديد .builder () .rl (sb.toString ()) .build () ؛ استجابة الاستجابة = فارغة ؛ حاول {reponse = okhttpclient.newcall (request) .execute () ؛ int status = response.code () ؛ if (status == 200) {return response.body (). string () ؛ }} catch (استثناء e) {logger.error ("OKHTTP pUT error >> ex = {}" ، stiventutils.getStackTrace (e)) ؛ } أخيرًا {if (response! = null) {response.close () ؛ }} return ResponseBody ؛ } / ** * post * * param url 请求的 url * param params post form 提交的参数 * regurn * / public string post (url 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)) ؛ }} طلب طلب = طلب جديد .builder () .rl (url) .post (builder.build ()) .build () ؛ استجابة الاستجابة = فارغة ؛ حاول {reponse = okhttpclient.newcall (request) .execute () ؛ int status = response.code () ؛ if (status == 200) {return response.body (). string () ؛ }} catch (استثناء e) {logger.error ("OKHTTP POST ERROR >> ex = {}" ، stiventutils.getStackTrace (e)) ؛ } أخيرًا {if (response! = null) {response.close () ؛ }} return ResponseBody ؛ } / ** * post 上传文件 * * param url * param params * param fileType * return * / public string postfile (url 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 (params.get (key) file) {file file = (file) params.get (key) ؛ builder.addformdatapart (key ، file.getName () ، requestbody.create (mediaType.parse (fileType) ، file)) ؛ يكمل؛ } builder.addformdatapart (Key ، params.get (key) .toString ()) ؛ }} طلب طلب = طلب جديد .builder () .rl (url) .post (builder.build ()) .build () ؛ استجابة الاستجابة = فارغة ؛ حاول {reponse = okhttpclient.newcall (request) .execute () ؛ int status = response.code () ؛ if (status == 200) {return response.body (). string () ؛ }} catch (استثناء e) {logger.error ("OKHTTP postfile error >> ex = {}" ، stiventUtilStackTrace (e)) ؛ } أخيرًا {if (response! = null) {response.close () ؛ }} return ResponseBody ؛ }}使用方法
ResourcePrivate Okhttputil Okhttputil ؛
总结
以上就是这篇文章的全部内容了 , 希望本文的内容对大家的学习或者工作具有一定的参考学习价值 , 如果有疑问大家可以留言交流 , 谢谢大家对武林网的支持。