Okhttp3最佳使用方式

Okhttp3最佳使用方式

一,使用前准备

要使用okhttp3,首先我们要引入相关依赖,至于版本的选择,就根据自己项目的需求了。

 <dependency>
    <groupId>com.squareup.okhttp3</groupId>
     <artifactId>okhttp</artifactId>
     <version>3.11.0</version>
 </dependency>

二,初始化client

使用单例模式,因为,我们只需要一个okhttp3的client就行了。在初始化的时候,我们需要配置相应的参数,client的参数比较多,我们可以看自己的需求添加。

import okhttp3.*;
import java.util.concurrent.TimeUnit;
/**
 * okhttp3 单例对象
 */
public class OkHttpClientSingle {

    private OkHttpClientSingle(){
    }

    private static volatile OkHttpClient clientInstance;

    public static OkHttpClient getClientInstance() {
        if (clientInstance == null) {
            synchronized (OkHttpClientSingle.class){
                if (clientInstance == null){
                    clientInstance = new OkHttpClient.Builder()
                            .connectTimeout(5, TimeUnit.SECONDS)
                            .writeTimeout(5, TimeUnit.SECONDS)
                            .readTimeout(15, TimeUnit.SECONDS)
                            .connectionPool(new ConnectionPool(10,5, TimeUnit.MILLISECONDS))
                            .retryOnConnectionFailure(true)
                            .build();
                }
            }
        }
        return clientInstance;
    }
}

三,实现okhttp3的工具类

该工具类,主要实现了,get和post请求,又分别为带header以及不带header。post又分为form表单跟body传参的。

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import java.util.Map;

@Slf4j
public class Okhttp3Utils {

    /**
     * 普通get请求
     * @param url
     * @return
     * @throws Exception
     */
    public static String get(String url) throws Exception{
        return  get(url,null);
    }

    /**
     * 普通get请求  带header
     * @param url
     * @return
     * @throws Exception
     */
    public static String get(String url, Map<String,String> headers) throws Exception{
        OkHttpClient clientInstance = OkHttpClientSingle.getClientInstance();

        Request.Builder builder = new Request.Builder().url(url);
        if(headers != null){
            for (String key : headers.keySet()) {
                builder.addHeader(key,headers.get(key));
            }
        }
        Request request = builder.build();

        Response res = clientInstance.newCall(request).execute();
        if(!res.isSuccessful()){
            log.warn("url:{} header:{} msg:{}",url,JSON.toJSONString(headers),res.message());
            return null;
        }
        return  res.body().string();
    }

    /**
     * post 请求带formdata
     * @param url
     * @param formData
     * @return
     * @throws Exception
     */
    public static String postForm(String url,  Map<String,String> formData) throws Exception{
       return postForm(url,null,formData);
    }

    /**
     * post 请求带formdata  带header
     * @param url
     * @param headers
     * @param formData
     * @return
     * @throws Exception
     */
    public static String postForm(String url, Map<String,String> headers, Map<String,String> formData) throws Exception{
        Response response = postFormRetRes(url, headers, formData);
        if(!response.isSuccessful()){
            log.warn("url:{} header:{} formData:{} msg:{}",url,JSON.toJSONString(headers),JSON.toJSONString(formData),response.message());
            return null;
        }
        return  response.body().string();
    }

    /**
     * post 请求带formdata  带header  返回response
     * @param url
     * @param headers
     * @param formData
     * @return
     * @throws Exception
     */
    private static Response postFormRetRes(String url, Map<String,String> headers, Map<String,String> formData) throws Exception{
        OkHttpClient clientInstance = OkHttpClientSingle.getClientInstance();

        RequestBody requestBody = null;
        FormBody.Builder builder = new FormBody.Builder();
        if(formData != null){
            for (String key : formData.keySet()) {
                builder.add(key,formData.get(key));
            }
            requestBody = builder.build();
        }

        Request.Builder requestBuilder = new Request.Builder().url(url);
        if(requestBody != null){
            requestBuilder.post(requestBody);
        }
        if(headers != null){
            for (String key : headers.keySet()) {
                requestBuilder.addHeader(key,headers.get(key));
            }
        }
        Request request = requestBuilder.build();
        Response res = clientInstance.newCall(request).execute();
        return  res;
    }

    /**
     * post 请求带body json数据  返回string
     * @param url
     * @param data
     * @return
     * @throws Exception
     */
    public static String postBody(String url,   Object data) throws Exception{
        Response response = postBodyRetRes(url, null, data);
        if(!response.isSuccessful()){
            log.warn("url:{}  body:{} msg:{}",url,JSON.toJSONString(data),response.message());
            return null;
        }
        return  response.body().string();
    }

    /**
     * post 请求带body json数据  带header  返回string
     * @param url
     * @param headers
     * @param data
     * @return
     * @throws Exception
     */
    public static String postBody(String url, Map<String,String> headers,  Object data) throws Exception{
        Response response = postBodyRetRes(url, headers, data);
        if(!response.isSuccessful()){
            log.warn("url:{} header:{} body:{} msg:{}",url,JSON.toJSONString(headers),JSON.toJSONString(data),response.message());
            return null;
        }
        return  response.body().string();
    }

    /**
     * post 请求带body json数据  带header  返回response
     * @param url
     * @param headers
     * @param data
     * @return
     * @throws Exception
     */
    public static Response postBodyRetRes(String url, Map<String,String> headers,  Object data) throws Exception{
        OkHttpClient clientInstance = OkHttpClientSingle.getClientInstance();

        MediaType mediaType = MediaType.parse("application/json; charset=UTF-8");

        RequestBody requestBody = FormBody.create(mediaType , JSON.toJSONString(data));

        Request.Builder requestBuilder = new Request.Builder().url(url);
        if(requestBody != null){
            requestBuilder.post(requestBody);
        }
        if(headers != null){
            for (String key : headers.keySet()) {
                requestBuilder.addHeader(key,headers.get(key));
            }
        }
        Request request = requestBuilder.build();
        Response res = clientInstance.newCall(request).execute();
        return  res;
    }
}

四,总结

okhttp3是个非常好用的http的库。要比httpclient好用多了。如果想更多的了解使用okhttp3,我还是推荐大家去官网去看看。链接: 官网

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是使用 OkHttp3 发起 HTTP/2.0 POST 请求的 Java 代码: ```java import okhttp3.*; import java.io.IOException; public class Http2PostRequestExample { public static void main(String[] args) throws IOException { OkHttpClient client = new OkHttpClient(); // 构建 HTTP/2.0 的请求 Request request = new Request.Builder() .url("https://example.com/api") .post(RequestBody.create(MediaType.parse("application/json"), "{\"key\":\"value\"}")) .build(); // 发送请求 Response response = client.newCall(request).execute(); // 处理响应 if (response.isSuccessful()) { System.out.println(response.body().string()); } else { System.err.println("Unexpected response code: " + response); } } } ``` 这个例子中,我们使用 OkHttp3 的 `OkHttpClient` 类来创建 HTTP 客户端,然后构建一个 HTTP/2.0 的 POST 请求。在 `post()` 方法中,我们使用 `RequestBody.create()` 方法来创建一个请求体,并指定它的 MIME 类型为 `application/json`。最后,我们使用 `client.newCall(request).execute()` 方法来发送请求,并使用 `response.body().string()` 方法来获取响应内容。 需要注意的是,如果你要使用 HTTP/2.0 协议,你需要确保你的服务器端已经支持 HTTP/2.0。另外,OkHttp3 默认情况下会自动选择最佳的协议版本,如果你想强制使用 HTTP/2.0,可以在创建 `OkHttpClient` 对象时指定 `protocols()` 方法,如下所示: ```java OkHttpClient client = new OkHttpClient.Builder() .protocols(Arrays.asList(Protocol.HTTP_2, Protocol.HTTP_1_1)) .build(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值