JAVA的OkHttp使用

使用OkHttp发送请求主要分为以下几步骤:
  • 创建OkHttpClient对象
  • 创建Request对象
  • 将Request 对象封装为Call
    -通过Call 来执行同步或异步请求,调用execute方法同步执行,调用enqueue方法异步执行
创建连接:
private OkHttpClient client = new OkHttpClient();
GET请求:
@Test
public void testGet() throws IOException {
    String api = "/api/okGet";
    String url = String.format("%s%s", BASE_URL, api);
    Request request = new Request.Builder()
            .url(url)
            .get() 
            .build();
    final Call call = client.newCall(request);
    Response response = call.execute();
    System.out.println(response.body().string());
}
PUT请求:
@Test
public void testPut() throws IOException {
    String api = "/api/okPut";
    String url = String.format("%s%s", BASE_URL, api);
    //请求参数
    UserVO userVO = UserVO.builder().name("h2t").id(11L).build();
    RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),
    JSONObject.toJSONString(userVO));
    Request request = new Request.Builder()
            .url(url)
            .put(requestBody)
            .build();
    final Call call = client.newCall(request);
    Response response = call.execute();
    System.out.println(response.body().string());
}
POST请求:

添加对象

@Test
public void testPost() throws IOException {
    String api = "/api/okPost";
    String url = String.format("%s%s", BASE_URL, api);
    //请求参数
    JSONObject json = new JSONObject();
    json.put("name", "hetiantian");
    RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),     String.valueOf(json));
    Request request = new Request.Builder()
            .url(url)
            .post(requestBody) //post请求
           .build();
    final Call call = client.newCall(request);
    Response response = call.execute();
    System.out.println(response.body().string());
}
上传文件
@Test
public void testUpload() throws IOException {
    String api = "/api/okPost/file";
    String url = String.format("%s%s", BASE_URL, api);
    RequestBody requestBody = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("file", "docker_practice.pdf",
                    RequestBody.create(MediaType.parse("multipart/form-data"),
                            new File("C:/Users/hetiantian/Desktop/学习/docker_practice.pdf")))
            .build();
    Request request = new Request.Builder()
            .url(url)
            .post(requestBody)  //默认为GET请求,可以不写
            .build();
    final Call call = client.newCall(request);
    Response response = call.execute();
    System.out.println(response.body().string());
}

通过addFormDataPart方法模拟表单方式上传文件

DELETE请求:
@Test
public void testDelete() throws IOException {
  String url = String.format("%s%s", BASE_URL, api);
  //请求参数
  Request request = new Request.Builder()
          .url(url)
          .delete()
          .build();
  final Call call = client.newCall(request);
  Response response = call.execute();
  System.out.println(response.body().string());
}
请求的取消:
@Test
public void testCancelSysnc() throws IOException {
    String api = "/api/okCancel";
    String url = String.format("%s%s", BASE_URL, api);
    Request request = new Request.Builder()
            .url(url)
            .get()  
            .build();
    final Call call = client.newCall(request);
    Response response = call.execute();
    long start = System.currentTimeMillis();
    //测试连接的取消
    while (true) {
         //1分钟获取不到结果就取消请求
        if (System.currentTimeMillis() - start > 1000) {
            call.cancel();
            System.out.println("task canceled");
            break;
        }
    }

    System.out.println(response.body().string());
}

调用cancel方法进行取消 测试结果:

task canceled
cost 9110 msc

java.net.SocketException: socket closed...【省略】
OkHttp超时设置:

直接在OkHttp上进行设置

private OkHttpClient client = new OkHttpClient.Builder()
        .connectTimeout(60, TimeUnit.SECONDS)//设置连接超时时间
        .readTimeout(60, TimeUnit.SECONDS)//设置读取超时时间
        .build();
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值