OkHttp是一款优秀的HTTP框架,它支持get请求和post请求,支持基于Http的文件上传和下载,支持加载图片,支持下载文件透明的GZIP压缩,支持响应缓存避免重复的网络请求,支持使用连接池来降低响应延迟问题。
注
:okhttp需要okio库的支持,okio是okhttp的通信基础
官网
安装
- 引入jar包
implementation 'com.squareup.okhttp3:okhttp:3.14.2'
同步请求
- GET请求
-new OkHttpClient
-构造Request对象
-通过前两步中的对象构建Call对象
-通过execute()
来提交请求OkHttpClient client = new OkHttpClient(); //Request是OkHttp中访问的请求,Builder是辅助类,Response即OkHttp中的响应。 String url="http://lilq.cn:8080/quan"; Request request = new Request.Builder() .url(url) .build(); Response response = null; try { response = client.newCall(request).execute(); String json = response.body().string(); //response.body() 不可执行多次 io读取完流关闭 System.out.println(json); } catch (IOException e) { e.printStackTrace(); }
- POST请求
POST与GET相比,就是在构造Request
对象时,需要多构造一个RequestBody
对象,用它来携带我们要提交的数据。在构造RequestBody
需要指定MediaType
,用于描述请求/响应 body 的内容类型OkHttpClient client = new OkHttpClient(); String url = "http://lilq.cn:8080/quan"; String json = "{\"name\":\"Http权威指南\"}"; //设置请求体 MediaType指定媒体类型 RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),json); Request request = new Request.Builder() .url(url) .post(body)//等同 method("POST",body) 请求方法需要全部大写 .build(); Response response = null; try { response = client.newCall(request).execute(); String resJson = response.body().string(); System.out.println(resJson); } catch (IOException e) { e.printStackTrace(); }
异步处理
异步处理需要通过Call#enqueue(Callback)
方法来提交异步请求
- GET请求
OkHttpClient client = new OkHttpClient(); String url = "http://lilq.cn:8080/quan"; Request request = new Request.Builder() .url(url) .build(); //加入队列 client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { System.out.println(e); } @Override public void onResponse(Call call, Response response) throws IOException { String resJson = response.body().string(); System.out.println(resJson); } });
- POST请求
OkHttpClient client = new OkHttpClient(); String url = "http://lilq.cn:8080/quan"; String json = "{\"name\":\"JAVA核心思想\"}"; RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"),json); Request request = new Request.Builder() .method("POST",requestBody) .url(url) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { System.out.println(e); } @Override public void onResponse(Call call, Response response) throws IOException { String resJson = response.body().string(); System.out.println(resJson); } });