前言
OKHTTP介紹
HTTP是現代應用程序網絡的方式。這就是我們交換數據和媒體的方式。 >有效地做HTTP可以使您的東西更快地負載並節省帶寬。
OKHTTP是HTTP客戶端,默認情況下是有效的:
HTTP/2支持允許所有請求到同一主機共享套接字。
連接池減少請求延遲(如果沒有HTTP/2)。
透明的GZIP縮小下載尺寸。
響應緩存可以完全避免網絡以獲得重複請求。
當網絡麻煩時,OKHTTP堅持不懈:它將從>>公共連接問題中靜靜地恢復。如果您的服務有多個IP地址,則OKHTTP將>如果第一個連接失敗,請嘗試替代地址。這對於IPv4+IPv6>以及在冗餘數據中心中託管的服務是必需的。 OKHTTP啟動新的連接>具有現代TLS功能(SNI,ALPN),如果握手失敗,則降至TLS 1.0。使用OKHTTP很容易。它的請求/響應API設計具有流利的構建器和不變性。它支持帶回調的同步封鎖調用和異步調用。
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文件中增加以下依賴
<dependency> <groupId> com.squareup.okhttp3 </groupid> <ARTIFACTID> okhttp </artifactid> </artifactid> <版本> 3.6.0 </version>
書寫配置類
用@configuration註解該類,等價與xml beans@bean@bean標註方法等價於xml bean。 bean。
@ConfigurationPublic類OKHTTPCONFIGURATION {@BEAN PUBLIC X509TRUSTMANAGER X509TRUSTMANAGER(){返回新的X509TRUSTMANAGER(){@Override public void CheckClientTrusted(x509certificate [x509certificate [x509certificate [] x509certificate [] x509certificateS publical string exterty exterception exters experts scept ofertion sception { checkServerTrusted(x509certificate [] x509certificates,string s)拋出證書exception {} @Override public x509certificate [] getAcceptedissuers(){返回新的x509certificate [0]; }}; } @bean public sslsocketFactory sslsocketFactory(){嘗試{//信任任何鏈接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(); }返回null; } /***創建一個新的連接池,其中使用適用於單用戶應用程序的調整參數。 *此池中的調整參數可能會在未來的OKHTTP版本中更改。當前 */ @bean public ConnectionPool pool(){返回New ConnectionPool(200,5,TimeUnit.minutes); } @bean public OkhttpClient OkhttpClient(){返回新的OKHTTPCLIENT.BUILDER().sslsocketFactory(sslsocketFactory(),x509trustmanager(),x509trustmanager().retryryonConnectionFailure() timeunit.seconds).ReadTimeOut(10L,TimeUnit.seconds).build(); }}}工具類
自己寫的工具類,比較簡單,不是休息
@componentPublic類OKHTTPUTIL {private static final logger logger = loggerfactory.getLogger(okhtttputil.class); @Resource private okhttpclient okhttpclient; / ** * get * * @param url請求的url * @param查詢請求的參數,在瀏覽器?後面的數據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.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;嘗試{wendesp = okhttpclient.newcall(request).execute(); int status = wendesp.code(); if(status == 200){返迴響應。 Body.body()。 string(); }} catch(異常e){logger.error(“ okhttp put錯誤>> ex = {}”,exceptionutils.getStackTrace(e)); }最後{if(wiss!= null){response.close(); }}返迴響應body; } / ** * post * * @param URL請求的url * @param params port forp form form @return * / public string port(字符串url,map <string,string,string> params){strign responsebody =“”; formbody.builder Builder = new FormBody.Builder(); //添加參數如果(params!= null && params.keyset()。size()> 0){for(string鍵:params.keyset()){builder.add(key,params.get(key)); }}請求request = new request .builder().url(url).post(builder.build()).build();響應響應= null;嘗試{wendesp = okhttpclient.newcall(request).execute(); int status = wendesp.code(); if(status == 200){返迴響應。 Body.body()。 string(); }} catch(異常e){logger.error(“ okhttp post error >> ex = {}”,exceptionutils.getStackTrace(e)); }最後{if(wiss!= null){response.close(); }}返迴響應body; } / ** * post上傳文件 * * @param url * @param params * @param filetype * @return * @return * / public string postfile(字符串url,map <string,object> params,params,string filetype){string response vernessbody =“”; multipartbody.builder Builder = new Multipartbody.builder(); //添加參數if(params!= null && params.keyset()。size()> 0){for(string鍵:params.keyset()){if(params.get(params.get(key)instanceof file){file file file =(file)params.get(paramse)params.get(key); builder.addformDatapart(key,file.getName(),requestbody.create(mediatype.parse(filetype),file)));繼續; } builder.addformDatapart(key,params.get(key).toString()); }}請求request = new request .builder().url(url).post(builder.build()).build();響應響應= null;嘗試{wendesp = okhttpclient.newcall(request).execute(); int status = wendesp.code(); if(status == 200){返迴響應。 Body.body()。 string(); }} catch(異常e){logger.error(“ okhttp postfile錯誤>> ex = {}”,exceptionutils.getStackTrace(e)); }最後{if(wiss!= null){response.close(); }}返迴響應body; }}}使用方法
@Resourceprivate Okhttputil Okhttputil;
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。 ,謝謝大家對武林網的支持。