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