亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

spring集成okhttp3的步驟詳解

2024-07-14 08:40:17
字體:
來源:轉載
供稿:網友

前言

okhttp 介紹

HTTP is the way modern applications network. It's how we exchange data & media. >Doing HTTP efficiently makes your stuff load faster and saves bandwidth.

OkHttp is an HTTP client that's efficient by default:

HTTP/2 support allows all requests to the same host to share a socket.
Connection pooling reduces request latency (if HTTP/2 isn't available).
Transparent GZIP shrinks download sizes.
Response caching avoids the network completely for repeat requests.
OkHttp perseveres when the network is troublesome: it will silently recover from > >common connection problems. If your service has multiple IP addresses OkHttp will >attempt alternate addresses if the first connect fails. This is necessary for IPv4+IPv6 >and for services hosted in redundant data centers. OkHttp initiates new connections >with modern TLS features (SNI, ALPN), and falls back to TLS 1.0 if the handshake fails.

Using OkHttp is easy. Its request/response API is designed with fluent builders and immutability. It supports both synchronous blocking calls and async calls with callbacks.

OkHttp supports Android 2.3 and above. For Java, the minimum requirement is 1.7. —摘自 https://square.github.io/okhttp/

特點

1.支持http和https協議,api相同,易用;

2.http使用線程池,https使用多路復用;

3.okhttp支持同步和異步調用;

4.支持普通form和文件上傳form;

5.提供了攔截器,操作請求和響應(日志,請求頭,body等);

6.okhttp可以設置緩存;

準備工作

在pom.xml文件中增加以下依賴

<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <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 checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {  }  @Override  public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws 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());  return sslContext.getSocketFactory(); } catch (NoSuchAlgorithmException e) {  e.printStackTrace(); } catch (KeyManagementException e) {  e.printStackTrace(); } return null; } /** * Create a new connection pool with tuning parameters appropriate for a single-user application. * The tuning parameters in this pool are subject to change in future OkHttp releases. Currently */ @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(pool())//連接池  .connectTimeout(10L, TimeUnit.SECONDS)  .readTimeout(10L, TimeUnit.SECONDS)  .build(); }}

工具類

自己寫的工具類,比較簡單,不是REST風格

@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, String> queries) { String responseBody = ""; StringBuffer sb = new StringBuffer(url); if (queries != null && queries.keySet().size() > 0) {  boolean firstFlag = true;  Iterator iterator = 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(); Response response = 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)); } finally {  if (response != null) {  response.close();  } } return responseBody; } /** * 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 request = new Request  .Builder()  .url(url)  .post(builder.build())  .build(); Response response = null; try {  response = okHttpClient.newCall(request).execute();  int status = response.code();  if (status == 200) {  return response.body().string();  } } catch (Exception e) {  logger.error("okhttp post error >> ex = {}", ExceptionUtils.getStackTrace(e)); } finally {  if (response != null) {  response.close();  } } return responseBody; } /** * post 上傳文件 * * @param url * @param params * @param fileType * @return */ public String postFile(String 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) instanceof File) {   File file = (File) params.get(key);   builder.addFormDataPart(key, file.getName(), RequestBody.create(MediaType.parse(fileType), file));   continue;  }  builder.addFormDataPart(key, params.get(key).toString());  } } Request request = new Request  .Builder()  .url(url)  .post(builder.build())  .build(); Response response = 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 error >> ex = {}", ExceptionUtils.getStackTrace(e)); } finally {  if (response != null) {  response.close();  } } return responseBody; }}

使用方法

@Resourceprivate OkHttpUtil okHttpUtil;

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久国色av免费观看性色| 中文字幕视频一区二区在线有码| 亚洲国产毛片完整版| 日韩欧美极品在线观看| 亚洲精品国产福利| 亚洲国产精品va在线看黑人| 精品视频在线播放色网色视频| 国产成人精品免高潮费视频| 亚洲欧洲国产精品| 国产日韩欧美日韩大片| 国产+成+人+亚洲欧洲| 国产午夜精品全部视频在线播放| 久久久国产成人精品| 超碰97人人做人人爱少妇| 国产精品精品视频| 中文字幕日韩欧美在线| 亚洲人成电影网站色xx| 久久久久久亚洲精品| 国产精品久久精品| 日韩精品视频中文在线观看| 亚洲第一视频在线观看| 亚洲国产精品悠悠久久琪琪| 国产精品男人爽免费视频1| 欧美另类暴力丝袜| 欧美成人精品一区二区三区| 国产亚洲欧洲黄色| 亚洲成人xxx| 中文字幕日韩精品在线观看| 欧美黑人视频一区| 国产精品∨欧美精品v日韩精品| 久久精品国产2020观看福利| 久久精品成人动漫| 亚洲丁香婷深爱综合| 黑人与娇小精品av专区| 高清一区二区三区四区五区| 亚洲性av网站| 亚洲免费视频观看| 国产成人精品一区二区| 欧美日韩另类在线| 国产精品大片wwwwww| 456国产精品| 国模精品一区二区三区色天香| 国产精品一二三在线| 成人精品aaaa网站| 成人网址在线观看| 亚洲国产精品成人一区二区| 91精品国产91久久久久| 亚洲天堂av综合网| 色偷偷噜噜噜亚洲男人的天堂| 国模极品一区二区三区| 亚洲女人被黑人巨大进入al| 69精品小视频| 一本色道久久综合亚洲精品小说| 国产精品免费看久久久香蕉| 日韩最新av在线| 国产精品久久久久久中文字| 中文字幕免费国产精品| 精品网站999www| 久久精品99久久香蕉国产色戒| 国产99久久久欧美黑人| 亚洲激情视频网| 国产美女扒开尿口久久久| 亚洲理论片在线观看| 欧美日韩国产精品一区| 午夜剧场成人观在线视频免费观看| 国产一区二区三区直播精品电影| 亚洲日本成人女熟在线观看| 亚洲一区国产精品| 97精品一区二区视频在线观看| 日韩视频第一页| 在线亚洲欧美视频| 91av在线视频观看| 亚洲免费av网址| 国产精品一二三在线| 亚洲免费av电影| 高清日韩电视剧大全免费播放在线观看| 狠狠色噜噜狠狠狠狠97| 欧美日韩中国免费专区在线看| 国产日本欧美视频| 久久国产精品久久久久| 亚洲天堂网站在线观看视频| 自拍偷拍亚洲在线| 久热精品在线视频| 国内精品伊人久久| 欧美在线视频一区| 热久久99这里有精品| 国产成人精品久久二区二区| 国内精久久久久久久久久人| 欧美日韩国产中字| 国产91av在线| 国产精品入口免费视| 国产欧美 在线欧美| 亚洲久久久久久久久久| 国产精品成av人在线视午夜片| 欧美俄罗斯乱妇| 欧美老肥婆性猛交视频| 久久久999国产| 日韩美女激情视频| 欧美综合一区第一页| 国产精品网址在线| 久久久久久久久电影| 国产精品91久久久| 91在线精品视频| 日韩美女av在线免费观看| 精品无码久久久久久国产| 黑人巨大精品欧美一区二区| 成人欧美一区二区三区在线湿哒哒| www.亚洲一二| 大伊人狠狠躁夜夜躁av一区| 亚洲va久久久噜噜噜| 国产精品久久久久免费a∨| 午夜精品三级视频福利| www.美女亚洲精品| 久久久久久com| 国产成人在线亚洲欧美| 亚洲精品日韩丝袜精品| 午夜精品一区二区三区在线播放| 欧美黑人极品猛少妇色xxxxx| 亚洲在线视频观看| 成人免费视频网| 亚洲欧洲高清在线| 色爱精品视频一区| 亚洲一区二区三区视频| 日本91av在线播放| 国产成人精品综合久久久| 在线观看国产欧美| 黑人狂躁日本妞一区二区三区| 国产精品视频资源| 欧美黑人狂野猛交老妇| 97视频在线观看免费高清完整版在线观看| 日韩高清电影好看的电视剧电影| 精品国产91久久久久久| 国产成人精品视频在线| 久久久伊人日本| 亚洲美女自拍视频| 97在线观看视频| 国产精品扒开腿做爽爽爽男男| 91精品一区二区| 91sao在线观看国产| 国产欧亚日韩视频| 国产精品丝袜白浆摸在线| 日韩欧美黄色动漫| 亚洲影院色无极综合| 日韩精品免费在线播放| 亚洲大胆人体视频| 韩国一区二区电影| 国产精品成人一区| 国产v综合v亚洲欧美久久| 欧美日韩亚洲一区二| 欧美黑人性生活视频| 97在线视频免费观看| 国产成人精品免费视频| 97超碰蝌蚪网人人做人人爽| 亚洲欧美另类中文字幕| 欧美极品第一页| 日韩高清有码在线| 成人观看高清在线观看免费| 人妖精品videosex性欧美| 久久激情视频免费观看| 亚洲色图35p| 北条麻妃一区二区在线观看| 精品久久香蕉国产线看观看gif| 国产三级精品网站| 日韩欧美成人精品|