zoukankan      html  css  js  c++  java
  • OKHttp使用笔记

    简介

    HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽。OkHttp是一个高效的HTTP客户端,它有以下默认特性:

    • 支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接
    • 连接池减少请求延时
    • 透明的GZIP压缩减少响应数据的大小
    • 缓存响应内容,避免一些完全重复的请求

    当网络出现问题的时候OkHttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个IP地址,当第一个IP请求失败时,OkHttp会交替尝试你配置的其他IP,OkHttp使用现代TLS技术(SNI, ALPN)初始化新的连接,当握手失败时会回退到TLS 1.0。

     GitHub说明https://square.github.io/okhttp/ 

    使用

    boot中导入pom依赖

     <!--okhttp3-->
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>3.13.1</version>
            </dependency>

     

    编写工具类

    import okhttp3.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.util.CollectionUtils;
    
    import java.io.IOException;
    import java.util.Map;
    import java.util.Objects;
    
    /**
     * 利用OKHttp进行get和post的访问
     *
     */
    public class OKHttpUtil {
    
       static final Logger logger = LoggerFactory.getLogger(OKHttpUtil.class);
        /**
         * 发起get请求
         *
         * @param url
         * @return
         */
        public static String httpGet(String url) {
            String result = null;
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url(url).build();
            try {
                Response response = client.newCall(request).execute();
                result = response.body().string();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
        /**
         * 执行同步 Post请求
         * @param url
         * @param jsonStr
         * @param headers
         * @return
         * @throws IOException
         */
        public static Response httpPost(String url, String jsonStr, Map<String, String> headers) throws IOException {
            //构造请求体
            RequestBody requestBody = RequestBody.create(MediaType.parse("text/html;charset=utf-8"), jsonStr);
            //创建requestBody
            Request.Builder requestBuilder = new Request.Builder().url(url).post(requestBody);
            //构造请求头
            if(!CollectionUtils.isEmpty(headers)){
                for (Map.Entry<String, String> mapEntry : headers.entrySet()) {
                    // value不为空
                    if(!Objects.isNull(mapEntry.getValue())){
                        requestBuilder.addHeader(mapEntry.getKey(), String.valueOf(mapEntry.getValue()));
                    }
                }
            }
            //构建请求
            Request request = requestBuilder.build();
            //获取client
            OkHttpClient okHttpClient = new OkHttpClient();
            //执行
            Response response = okHttpClient.newCall(request).execute();
            return response;
        }
    
    
    }
  • 相关阅读:
    jdk源码阅读笔记之java集合框架(四)(LinkedList)
    jdk源码阅读笔记之java集合框架(二)(ArrayList)
    jdk源码阅读笔记之java集合框架(三)(modCount)
    java文件拷贝的一点思考
    mac(10.11.5 )安装pt-query-digest所遇问题总结
    关于springboot启动所需所有jar包详解
    volatile的一点理解
    java 虚拟机自动内存管理
    虚拟机运行时数据区划分
    笔记本连上wifi(WiFi完全没问题)却无法上网
  • 原文地址:https://www.cnblogs.com/21-Gram/p/11319524.html
Copyright © 2011-2022 走看看