这篇文章介绍OKHttp,OKHttp是Square的一个开源网络库,功能很强大,这篇文章大多数内容都是翻译自官方的 介绍 。这里多提一点,Square绝逼是一个良心企业,开源了很多非常优秀的库,这是他们 Github的地址 。
介绍
HTTP是目前很多应用的网络连接方式,通过它我们可以交换数据和媒体。有效的使用HTTP会使你的应用获得更快的加载速度,并且更节约带宽。OKHttp就是为这个目标应运而生的。
OKHttp的优点:
- 支持 SPDY ,允许连接同一主机的所有请求分享一个socket。
- 如果SPDY不可用,会使用连接池减少请求延迟。
- 使用GZIP压缩下载内容,且压缩操作对用户是透明的。
- 利用响应缓存来避免重复的网络请求。
OKHttp的特点:
- 当网络出现问题的时候,OKHttp会依然有效,它将从常见的连接问题当中恢复。
- 如果你的服务端有多个IP地址,当第一个地址连接失败时,OKHttp会尝试连接其他的地址,这对IPV4和IPV6以及寄宿在多个数据中心的服务而言,是非常有必要的。
- OKHttp利用TLS的特性初始化新的连接,如果握手失败便退回到SSLV3。
- OKHttp的使用很简单。其2.0API拥有流畅的构建器和稳定性。它支持同步阻塞请求和异步回调请求。
- 你可以试试OKHttp而不重写网络代码。okhttp-urlconnection模块实现了都很熟悉的java.net.HttpURLConnection的API,okhttp-apache模块实现了Apache的HttpClient的API。
- OKHttp支持Android2.3以上,Java支持最低版本1.7。
使用示例
下面两个示例都是来自官方的 例子 。
Get方式请求一个URL的内容
package com.squareup.okhttp.guide;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import java.io.IOException;
public class GetExample {
//初始化一个OkHttpClient
OkHttpClient client = new OkHttpClient();
//Get请求的核心方法
String run(String url) throws IOException {
//生成一个request,把url放进去
Request request = new Request.Builder()
.url(url)
.build();
//执行request,并得到response
Response response = client.newCall(request).execute();
//把response中的body转化成string返回
return response.body().string();
}
public static void main(String[] args) throws IOException {
GetExample example = new GetExample();
String response = example.run("https://raw.github.com/square/okhttp/master/README.md");
System.out.println(response);
}
}
Post方式提交内容到服务器
package com.squareup.okhttp.guide;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import java.io.IOException;
public class PostExample {
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
//初始化一个OkHttpClient
OkHttpClient client = new OkHttpClient();
//Post请求的核心方法
String post(String url, String json) throws IOException {
//创建一个Json格式的请求body
RequestBody body = RequestBody.create(JSON, json);
//生成一个request,把url和body放进去
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
//执行request,并得到response
Response response = client.newCall(request).execute();
//把response中的body转化成string返回
return response.body().string();
}
//模拟一段测试的Json数据
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 {
PostExample example = new PostExample();
String json = example.bowlingJson("Jesse", "Jake");
String response = example.post("http://www.roundsapp.com/post", json);
System.out.println(response);
}
}