准備工作
在pom.xml文件中增加以下依賴
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.6.0</version> </dependency>
書寫配置類
用@Configuration注解該類,等價與XML中配置beans;用@Bean標注方法等價於XML中配置bean。
@Configuration
@Configuration public 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(100, TimeUnit.SECONDS)//設置鏈接超時 .writeTimeout(100, TimeUnit.SECONDS)// 設置寫數據超時 .readTimeout(100, TimeUnit.SECONDS)// 設置讀數據超時 .build(); } }
工具類
自己寫的工具類,比較簡單,不是REST風格
@Component public 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; } }
okhttp 一般的util工具
import okhttp3.*; import org.apache.commons.lang3.exception.ExceptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.util.Iterator; import java.util.Map; public class OkHttpUtil{ private static final Logger logger = LoggerFactory.getLogger(OkHttpUtil.class); /** * get * @param url 請求的url * @param queries 請求的參數,在瀏覽器?后面的數據,沒有可以傳null * @return */ public static 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 { OkHttpClient okHttpClient = new OkHttpClient(); response = okHttpClient.newCall(request).execute(); int status = response.code(); if (response.isSuccessful()) { return response.body().string(); } } catch (Exception e) { logger.error("okhttp3 put error >> ex = {}", ExceptionUtils.getStackTrace(e)); } finally { if (response != null) { response.close(); } } return responseBody; } /** * post * * @param url 請求的url * @param params post form 提交的參數 * @return */ public static 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 { OkHttpClient okHttpClient = new OkHttpClient(); response = okHttpClient.newCall(request).execute(); int status = response.code(); if (response.isSuccessful()) { return response.body().string(); } } catch (Exception e) { logger.error("okhttp3 post error >> ex = {}", ExceptionUtils.getStackTrace(e)); } finally { if (response != null) { response.close(); } } return responseBody; } /** * get * @param url 請求的url * @param queries 請求的參數,在瀏覽器?后面的數據,沒有可以傳null * @return */ public static String getForHeader(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() .addHeader("key", "value") .url(sb.toString()) .build(); Response response = null; try { OkHttpClient okHttpClient = new OkHttpClient(); response = okHttpClient.newCall(request).execute(); int status = response.code(); if (response.isSuccessful()) { return response.body().string(); } } catch (Exception e) { logger.error("okhttp3 put error >> ex = {}", ExceptionUtils.getStackTrace(e)); } finally { if (response != null) { response.close(); } } return responseBody; } /** * Post請求發送JSON數據....{"name":"zhangsan","pwd":"123456"} * 參數一:請求Url * 參數二:請求的JSON * 參數三:請求回調 */ public static String postJsonParams(String url, String jsonParams) { String responseBody = ""; RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonParams); Request request = new Request.Builder() .url(url) .post(requestBody) .build(); Response response = null; try { OkHttpClient okHttpClient = new OkHttpClient(); response = okHttpClient.newCall(request).execute(); int status = response.code(); if (response.isSuccessful()) { return response.body().string(); } } catch (Exception e) { logger.error("okhttp3 post error >> ex = {}", ExceptionUtils.getStackTrace(e)); } finally { if (response != null) { response.close(); } } return responseBody; } /** * Post請求發送xml數據.... * 參數一:請求Url * 參數二:請求的xmlString * 參數三:請求回調 */ public static String postXmlParams(String url, String xml) { String responseBody = ""; RequestBody requestBody = RequestBody.create(MediaType.parse("application/xml; charset=utf-8"), xml); Request request = new Request.Builder() .url(url) .post(requestBody) .build(); Response response = null; try { OkHttpClient okHttpClient = new OkHttpClient(); response = okHttpClient.newCall(request).execute(); int status = response.code(); if (response.isSuccessful()) { return response.body().string(); } } catch (Exception e) { logger.error("okhttp3 post error >> ex = {}", ExceptionUtils.getStackTrace(e)); } finally { if (response != null) { response.close(); } } return responseBody; } }
使用方法
@Resource private OkHttpUtil okHttpUtil;