前言
okhttp是一个使用广泛的http库,虽然其在安卓开发使用比较多,但它使用起来简单,不会出现httpclient那样换一个版本使用方式就不同的情况,本文介绍了如何使用okhttp发起application/json类型的请求
编码
首先我们需要创建一个OkHttpClient
实例:
OkHttpClient client = new OkHttpClient().newBuilder().build();
然后构造Request
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), json);
Request req = new Request.Builder()
.headers(Headers.of(headers))
.url(url)
.post(requestBody)
.build();
最后发起请求
Response response = client.newCall(req).execute();
System.out.println(response.body().string());
OkHttpClient实例是线程安全的,我们可以将其作为一个公共的对象来使用,我封装了这样的类:
public class HttpClientUtil {
public static final HttpClientUtil INSTANCE = new HttpClientUtil();
private final OkHttpClient client;
public HttpClientUtil() {
client = new OkHttpClient().newBuilder()
.build();
}
public String post(String url, Map<String, String> headers, String json) throws IOException {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), json);
Request build = new Request.Builder()
.headers(Headers.of(headers))
.url(url)
.post(requestBody)
.build();
Response response = client.newCall(build).execute();
return response.body().string();
}
}
超时时间的设置
超时时间的设置也较为简单,示例如下:
client = new OkHttpClient().newBuilder()
.connectTimeout(8, TimeUnit.SECONDS)
.readTimeout(8, TimeUnit.SECONDS)
.writeTimeout(8, TimeUnit.SECONDS)
.build();
可以看到它有三个超时时间的设置,相关解释可以自行查看api或者百度
总结
本文介绍了如何使用okhttp发起application/json类型的请求并提供了一个完整的Http工具类
文章评论