Headers responseHeaders = response.headers();
for (int i = 0; i < responseHeaders.size(); i++) {
System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
}
System.out.println(response.body().string());
}
}
异步Get请求(Asynchronous Get)
在工作线程下载文件,并在响应可读时进行回调,回调会在响应头准备就绪后开始进行。读取响应体时可能会阻塞当前线程。OkHttp目前不提供异步API来部分接收响应体。
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
Request request = new Request.Builder()
.url(“http://publicobject.com/helloworld.txt”)
.build();
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 {
try (ResponseBody responseBody = response.body()) {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
Headers responseHeaders = response.headers();
for (int i = 0, size = responseHeaders.size(); i < size; i++) {
System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
}
System.out.println(responseBody.string());
}
}
});
}
提取响应头(Accessing Headers)
通常,HTTP标头的工作方式类似于Map<String, String>:每个字段都有一个值或者没有值。但是一些头文件允许多个值,比如Guava的Multimap。例如:HTTP响应提供多个Vary响应头。OkHttp的API让这两种情况都适用。
在写请求头的时候,使用header(name, value)来设置唯一的name、value。如果存在现有值,则在添加新值之前将它们删除。使用addHeader(name, value)来添加一个头,而不必删除已经存在的头。
在读取响应头时,使用header(name)返回最后一次出现的name、value。通常情况这也是唯一的。如果不存在任何值,那么header(name)将会返回null。如果要读取字段所对应的所有值,请使用headers(name),它会返回一个列表。
如果要获取所有的Header,Headers类支持按索引访问。
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
Request request = new Request.Builder()
.url(“https://api.github.com/repos/square/okhttp/issues”)
.header(“User-Agent”, “OkHttp Headers.java”)
.addHeader(“Accept”, “application/json; q=0.5”)
.addHeader(“Accept”, “application/vnd.github.v3+json”)
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
System.out.println("Server: " + response.header(“Server”));
System.out.println("Date: " + response.header(“Date”));
System.out.println("Vary: " + response.headers(“Vary”));
}
}