zoukankan      html  css  js  c++  java
  • spring okhttp3

    准备工作

    在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;
    

      

  • 相关阅读:
    Linux NFS服务器的安装与配置
    Genymotion加速下载虚拟镜像速度慢失败Connection timeout
    人脸识别的损失函数
    caffe服务器搭建血泪记录
    shell
    ZigZag Conversion
    SSH阅读笔记
    numpy数组扩展函数repeat和tile用法
    高效网络小结
    Bag of Tricks for Image Classification with Convolutional Neural Networks论文笔记
  • 原文地址:https://www.cnblogs.com/jtlgb/p/10621183.html
Copyright © 2011-2022 走看看