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


}
posted @ 2019-08-08 10:09  21克的小怪兽  阅读(417)  评论(0编辑  收藏  举报