OKHttp
HTTP是现代应用程序网络的方式。这是我们交换数据和媒体的方式。
高效地执行HTTP可以使您的内容加载更快,节省带宽。
OkHttp 是一个具有如下优势的 HTTP 客户端:
-
HTTP/2支持允许对同一主机的所有请求共享一个套接字。
-
连接池减少请求延迟(如果HTTP/2不可用)。
-
透明的GZIP压缩下载大小。
-
响应缓存避免了重复请求的网络。
当网络出现问题时,OkHttp保持不变:它将从常见的连接问题中悄悄地恢复。 如果您的服务有多个IP地址,那么当第一个连接失败时,OkHttp将尝试替换地址。 这对于IPv4+IPv6和冗余数据中心托管的服务是必要的。OkHttp启动具有现代TLS特性的新连接(SNI, ALPN),如果握手失败,返回到TLS 1.0。
使用OkHttp很容易。它的请求/响应API是用流畅的构建器和不可变性设计的。它支持同步阻塞调用和带有回调的异步调用。
OkHttp支持Android 2.3和以上。对于Java,最低要求是1.7。
快速入门
Jar 依赖
<dependencies>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.2.0</version>
</dependency>
<!--Okio用于给OkHttp提供快速的I/O和可调整大小的缓存池。-->
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies>
Get
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/**
* <p> </p>
*
* <pre> Created: 2018/6/8 上午7:43 </pre>
* <pre> Project: tech-validation </pre>
*
* @author houbinbin
* @version 1.0
* @since JDK 1.7
*/
public class OkHttpGet {
/**
* 获取一个 URL 对应的信息
* @param url 网络地址
* @return 请求反馈
* @throws IOException if any
*/
String get(String url) throws IOException {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
public static void main(String[] args) throws IOException {
OkHttpGet example = new OkHttpGet();
String response = example.get("https://raw.github.com/square/okhttp/master/README.md");
System.out.println(response);
}
}
Post
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* <p> </p>
*
* <pre> Created: 2018/6/8 上午7:43 </pre>
* <pre> Project: tech-validation </pre>
*
* @author houbinbin
* @version 1.0
* @since JDK 1.7
*/
public class OkHttpPost {
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
/**
* 获取一个 URL 对应的信息
* @param url 网络地址
* @return 请求反馈
* @throws IOException if any
*/
private String post(String url, String json) throws IOException {
OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
/**
* 构建 JSON 数据
* @param player1 用户1
* @param player2 用户2
* @return JSON
*/
private String bowlingJson(String player1, String player2) {
return "{'winCondition':'HIGH_SCORE',"
+ "'name':'Bowling',"
+ "'round':4,"
+ "'lastSaved':1367702411696,"
+ "'dateStarted':1367702378785,"
+ "'players':["
+ "{'name':'" + player1 + "','history':[10,8,6,7,8],'color':-13388315,'total':39},"
+ "{'name':'" + player2 + "','history':[6,10,5,10,10],'color':-48060,'total':41}"
+ "]}";
}
public static void main(String[] args) throws IOException {
OkHttpPost example = new OkHttpPost();
String json = example.bowlingJson("Jesse", "Jake");
String response = example.post("http://www.roundsapp.com/post", json);
System.out.println(response);
}
}