下载jar包
官网:http://square.github.io/okhttp/
okhttp-3.11.0.jar
okio-2.0.0-RC1.jar
HTTP请求
get
private String get(String url) throws IOException {
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
} else {
throw new IOException("Unexpected code" + response);
}
}
post
post提交json
MediaType json = MediaType.parse("application/json; charset=utf-8");
private String post(String url, String content) throws IOException {
RequestBody requestBody = RequestBody.create(json, content);
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
} else {
throw new IOException("Unexpected code" + response);
}
}
post提交文件
public static final MediaType MEDIA_TYPE_MARKDOWN
= MediaType.parse("text/x-markdown; charset=utf-8");
public String postFile(String url, File file) throws IOException {
Request request = new Request.Builder()
.url(url)
.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))
.build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
}
post提交表单参数(就是普通的post请求)
public String postForm(String url) throws IOException {
FormBody formBody = new FormBody.Builder()
.add("username", "Tom")
.add("password", "123")
.build();
Request request = new Request.Builder()
.url(url)
.post(formBody)
.build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
}
post同时提交文件和表单参数
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
public String postMultipartBody(String url, File file) throws IOException {
MultipartBody multipartBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("title", "logo")
.addFormDataPart("image", "logo.png", RequestBody.create(MEDIA_TYPE_PNG, file))
.build();
Request request = new Request.Builder()
.url(url)
.post(multipartBody)
.build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
}
以上都是使用同步返回数据,若需要异步返回,请将execute()方法换成enqueue(callback)方法。
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
ResponseBody responseBody = response.body();
if (response.isSuccessful()) {
String result = responseBody.string();
// TODO: deal result
} else {
throw new IOException("Unexpected code " + response);
}
}
});
设置超时时间
//设置超时时间
public void configureTimeouts() {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
}
还可以为每一次请求设置超时时间
public void configureCallTimeouts() throws IOException {
Request request = new Request.Builder()
.url("")
.build();
OkHttpClient client1 = this.client.newBuilder()
.readTimeout(500, TimeUnit.MILLISECONDS)
.build();
Response response1 = client1.newCall(request).execute();
OkHttpClient client2 = this.client.newBuilder()
.readTimeout(3000, TimeUnit.MILLISECONDS)
.build();
Response response2 = client2.newCall(request).execute();
}
addHeader
public void header(String url) throws IOException {
Request request = new Request.Builder().url(url)
.header("User-Agent", "OkHttp Header.java")
.addHeader("Accept", "application/json: q=0.5")
.addHeader("Accept", "application/vnd.github.v2+json")
.build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
String header = response.header("");
String string = response.body().string();
} else {
throw new IOException("Unexpected code " + response);
}
}
MediaType类型参考文章
参考Media Types和MIMe类型
网友评论