介绍
简介
OkHttp 库的设计和实现的首要目标是高效。这也是选择 OkHttp 的重要理由之一。OkHttp 提供了对最新的 HTTP 协议版本 HTTP/2 和 SPDY 的支持,这使得对同一个主机发出的所有请求都可以共享相同的套接字连接。如果 HTTP/2 和 SPDY 不可用,OkHttp 会使用连接池来复用连接以提高效率。OkHttp 提供了对 GZIP 的默认支持来降低传输内容的大小。OkHttp 也提供了对 HTTP 响应的缓存机制,可以避免不必要的网络请求。当网络出现问题时,OkHttp 会自动重试一个主机的多个 IP 地址。
优势
允许连接到同一个主机地址的所有请求,提高请求效率共享Socket,减少对服务器的请求次数通过连接池,减少了请求延迟缓存响应数据来减少重复的网络请求减少了对数据流量的消耗自动处理GZip压缩
功能
get,post请求文件的上传下载加载图片(内部会图片大小自动压缩)支持请求回调,直接返回对象、对象集合支持session的保持
引入包
gradle
/
/ https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
compile
group: 'com.squareup.okhttp3',
name: 'okhttp',
version: '3.6.0'
maven
<dependency>
<groupId>com.squareup.okhttp3
</groupId>
<artifactId>okhttp
</artifactId>
<version>3.6.0
</version>
</dependency>
原生API使用
package com.kingboy.test;
import okhttp3.*;
import org.junit.Test;
import java.io.IOException;
/**
* @Author kingboy
* @Date 2017/4/14 09:45
* @Description OkHttpTest is used to http
*/
public class OkHttpTest {
/**
* POST方式:测试网易云音乐歌曲搜索接口
* @throws IOException
*/
@Test
public void httpPostTest()
throws IOException {
/**
* 准备好请求体
*/
FormBody formBody =
new FormBody.Builder()
.add(
"s",
"hello")
.add(
"offset",
"5")
.add(
"limit",
"10")
.add(
"type",
"1")
.build();
/**
* 准备好访问的url和方式
*/
Request request =
new Request.Builder()
.url(
"http://music.163.com/api/search/pc")
.post(formBody)
.build();
OkHttpClient httpClient =
new OkHttpClient();
/**
* 执行访问
*/
Response execute = httpClient.newCall(request).execute();
if(execute.isSuccessful()){
ResponseBody body = execute.body();
String string = body.string();
System.out.println(string);
}
else{
throw new IOException(
"访问失败!");
}
}
/**
* GET方式:测试百度首页
* @throws IOException
*/
@Test
public void httpGetTest()
throws IOException {
/**
* 准备好访问的url和方式
*/
Request request =
new Request.Builder()
.url(
"http://www.baidu.com")
.get()
.build();
OkHttpClient httpClient =
new OkHttpClient();
/**
* 执行访问
*/
Response execute = httpClient.newCall(request).execute();
if(execute.isSuccessful()){
ResponseBody body = execute.body();
String string = body.string();
System.out.println(string);
}
else{
throw new IOException(
"访问失败!");
}
}
}
转载请注明原文地址: https://ju.6miu.com/read-673362.html