上一章节介绍了okhttp的基本使用,这一章主要介绍okhttp的配置包括文件的上传下载,cookies的配置。
2 cookies的配置
Map<String ,List<Cookie>> cookies=new HashMap<>();
//List<Cookie> cookies =new ArrayList<>();
@Test
public void cookieTest() throws IOException {
OkHttpClient okHttpClient = new OkHttpClient
.Builder()
.cookieJar(new CookieJar() {
@Override
public void saveFromResponse(@NonNull HttpUrl httpUrl, @NonNull List<Cookie> list) {
//用于把cookie数据封装为一个list集合
//先保存到内存
cookies.put(httpUrl.host(),list);
}
@NonNull
@Override
public List<Cookie> loadForRequest(@NonNull HttpUrl httpUrl) {
//是这个网站就返回cookie,不是就返回一个空的list
if(httpUrl.host().equals("www.wanandroid.com")){
List<Cookie> cookieList =CookieUnitTest.this.cookies.get(httpUrl.host());
return cookieList==null?new ArrayList<>():cookieList;
}
return new ArrayList<>();
}
})
.build();
FormBody formBody=new FormBody.Builder().add("username","***")
.add("password","***")
.build();
Request request = new Request.Builder().url("https://www.wanandroid.com/user/login")
.post(formBody)
.build();
//请求的call对象
Call call=okHttpClient.newCall(request);
Response response =call.execute();
System.out.println(response.body().string());
//测试cookie是否可用
request = new Request.Builder().url("https://www.wanandroid.com/lg/collect/list/0/json")
.build();
//请求的call对象
Call call2=okHttpClient.newCall(request);
Response response2 =call2.execute();
System.out.println(response2.body().string());
3.文件上传的配置
@Test
public void uploadFileTest() throws IOException {
OkHttpClient okHttpClient = new OkHttpClient();
File file = new File("C:\\Users\\A\\Desktop\\test.txt");
File file2 = new File("C:\\Users\\A\\Desktop\\test2.txt");
MultipartBody multipartBody =new MultipartBody.Builder()
.addFormDataPart("file1",file.getName(),RequestBody.create(file, MediaType.parse("text/plain")))//key加value加文件类型
.addFormDataPart("file2",file2.getName(),RequestBody.create(file, MediaType.parse("text/plain")))
.addFormDataPart("a","1")
.build();
Request build = new Request.Builder().url("https://www.httpbin.org/post").post(multipartBody).build();
Call call=okHttpClient.newCall(build);
Response response = call.execute();
System.out.println(response.body().string());
}