19.java网络编程
okHttp
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version>
</dependency>
请求
创建OkHttpClient
构造Request ,默认get请求
Request.Builder().url(url).build();
get
同步
private final OkHttpClient client = new OkHttpClient();
String result;
Request request = new Request.Builder().url(url).build(); //构建请求
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
log.error("address:{},请求失败{}",address,response.code());
}
result=response.body().string();
}catch (Exception e) {
log.error("address:{},请求失败{}",address,e.getMessage());
return null;
}
异步
client.newCall(request).enqueue(new Callback() {
@Override public void onFailure(Call call, IOException e) {
log.error("请求失败,e:{}",e.getMessage());
}
@Override public void onResponse(Call call, Response response) throws IOException {
try (ResponseBody responseBody = response.body()) {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
}
}
});
post
public static final MediaType JSON = MediaType.get("application/json");
String jsonStr="";
RequestBody requestBody = RequestBody.create(jsonStr, JSON)
Request request = new Request.Builder().post(requestBody).url(url).build();
构建请求
设置请求头
- header 会覆盖已有的键
- addHeader 不会覆盖已有的
Request request = new Request.Builder()
.url(url)
.header("User-Agent", "会覆盖已有的")
.addHeader("Accept", "不会覆盖已有的")
.addHeader("Accept", "application/vnd.github.v3+json")
.build();
响应
数据
ResponseBody responseBody = response.body()
responseBody.string() //转字符串
响应头
- 获取全部响应头
- Map<nameList,valueList> response.headers();
Headers responseHeaders = response.headers(); for (int i = 0; i < responseHeaders.size(); i++) { System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i)); } - 获取指定响应头
- 如果有多个同名的健, 获取最后一个
- response.header("Server")
- 获取全部同名的, 写到列表,最后多个s
- response.headers("Server")
- 如果有多个同名的健, 获取最后一个

浙公网安备 33010602011771号