OKHttp3
OKHtto3执行过程
Get请求
1、无参数
@RestController
@Configuration
public class Okhttp {
OkHttpClient okHttpClient = new OkHttpClient()
.newBuilder()
.connectTimeout(10,TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.build();
@GetMapping("/get")
public String get () throws IOException {
Request request = new Request.Builder()
.url("http://localhost:8080/task")
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
return response.body().string();
}
}
2、有参数
public String getSyncWithParams(String url, String... keyValue) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
for (int i=0; i<keyValue.length; i+=2){
request.newBuilder()
.addHeader(keyValue[i], keyValue[i+1]);
}
Call call = client.newCall(request);
Response response = call.execute();
return response.body().string();
}
Post请求
首先添加 MediaType,用于描述Http请求和响应体的内容类型,也就是Content-Type
。
一次请求就是向目标服务器发送一串文本。什么样的文本?有下面结构的文本。
HTTP请求包结构.
例如:
POST /meme.php/home/user/login HTTP/1.1
Host: 114.215.86.90
Cache-Control: no-cache
Postman-Token: bd243d6b-da03-902f-0a2c-8e9377f6f6ed
Content-Type: application/x-www-form-urlencoded
tel=13637829200&password=123456
private final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
1、JOSN传参
private final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
public String postBody(String url, String json) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(baseURL + url)
.post(body)
.build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
return response.body().string();
} else {
throw new RuntimeException("Unexpected code " + response);
}
}
2、Key/Value
public String post(String url, String... keyValue) throws IOException {
RequestBody body = new FormBody.Builder()
.add(keyValue[0], keyValue[1])
.build();
Request request = new Request.Builder()
.url(baseURL + url)
.post(body)
.build();
Call call = client.newCall(request);
Response response = call.execute();
return response.body().string();
}
上传文件
public String postFile(String url, File file) throws IOException {
MediaType mediaType = MediaType.parse(org.springframework.http.MediaType.APPLICATION_OCTET_STREAM_VALUE);
RequestBody body = RequestBody.create(mediaType, file);
RequestBody requestBody = new MultipartBody.Builder().
setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(),body)
.build();
Request request = new Request.Builder()
.post(requestBody)
.url(baseURL + url)
.addHeader("Content-Type", org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}