java okhttp3工具类

简介: java okhttp3工具类

public class HttpUtil {

private static Logger log = LoggerFactory.getLogger(HttpUtil.class);

public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.get("text/PermanentAuthorizationCodeResult-markdown; charset=utf-8");
public static final MediaType MEDIA_TYPE_URLENCODED = MediaType.get("application/PermanentAuthorizationCodeResult-www-form-urlencoded; charset=utf-8");
public static final MediaType MEDIA_TYPE_JSON = MediaType.get("application/json; charset=utf-8");

public static OkHttpClient client;
private static HttpLoggingInterceptor logging = new HttpLoggingInterceptor(message -> log.info("okhttp: {}", message));

/**
 * @return
 */
public static OkHttpClient client() {
    if (client == null) {
        // 包含header、body数据
        logging.level(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        // header body 日志
        builder.addInterceptor(logging);
        // 设置连接超时时间
        builder.connectTimeout(30, TimeUnit.SECONDS);
        // 设置读取超时时间
        builder.readTimeout(20, TimeUnit.SECONDS);
        client = builder.build();
    }
    return client;
}

/**
 * @return
 */
public static OkHttpClient client(Long connectTimeout, Long readTimeout) {
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    // 设置连接超时时间
    builder.connectTimeout(connectTimeout, TimeUnit.SECONDS);
    // 设置读取超时时间
    builder.readTimeout(readTimeout, TimeUnit.SECONDS);
    client = builder.build();
    return client;
}

/**
 * 发送POST请求
 *
 * @param url
 * @param json
 * @return
 */
public static <T> T httpPostWithJSON(String url, String json, Class<T> clazz) {
    String body = post(url, json, MEDIA_TYPE_JSON, null);
    if (StringUtils.isNotBlank(body)) {
        return JsonUtil.parseObject(body, clazz);
    }
    return null;
}

/**
 * 发送POST请求
 *
 * @param url
 * @param json
 * @return
 */
public static String postJson(String url, String json) {
    return post(url, json, MEDIA_TYPE_JSON, null);
}

/**
 * 发送POST请求
 *
 * @param url
 * @param json
 * @return
 */
public static String post(String url, String json, MediaType mediaType, Headers headers) {
    return post(url, RequestBody.create(json, mediaType), headers);
}

/**
 * 发送 get 请求
 *
 * @param url
 * @return
 */
public static String get(String url) {
    return get(url, null);
}

/**
 * 发送 get 请求
 *
 * @param url
 * @return
 */
public static String get(String url, Headers headers) {
    return get(url, headers, Maps.newHashMap());
}

/**
 * 发送 get 请求
 *
 * @param url
 * @return
 */
public static String get(String url, Headers headers, Map<String, Object> parameters) {
    HttpUrl.Builder httpBuilder = HttpUrl.parse(url).newBuilder();
    log.debug("get parameters={}", parameters);
    if (parameters != null && parameters.size() > 0) {
        for (Map.Entry<String, Object> param : parameters.entrySet()) {
            httpBuilder.addQueryParameter(param.getKey(), StringUtil.toString(param.getValue(), ""));
        }
    }
    Request.Builder builder = new Request.Builder();
    builder.url(httpBuilder.build());
    log.debug("get url={}", url);
    if (headers != null && headers.size() > 0) {
        builder.headers(headers);
        log.debug("get headers={}", headers);
    }
    builder.get();
    try {
        Response response = client().newCall(builder.build()).execute();
        log.info("url={},protocol:{},code:{},message:{}", url, response.protocol(), response.code(), response.message());
        String string = response.body().string();
        log.debug("response: {}", string);
        if (response.isSuccessful()) {
            return string;
        }
        return null;
    } catch (Exception e) {
        log.debug("url={},onFailure: {}", url, e.getMessage());
        //log.debug("getStackTrace: {}", e.getStackTrace());
    }
    return null;
}

/**
 * 设置请求头
 *
 * @param headersParams
 * @return
 */
public static Headers setHeaders(Map<String, String> headersParams) {
    Headers.Builder builder = new Headers.Builder();
    if (headersParams != null) {
        Iterator<String> iterator = headersParams.keySet().iterator();
        String key = "";
        while (iterator.hasNext()) {
            key = iterator.next().toString();
            builder.add(key, headersParams.get(key));
            log.info("headers key={},value={}", key, headersParams.get(key));
        }
    }
    return builder.build();
}

/**
 * 发送POST请求
 *
 * @param url
 * @param params
 * @return
 */
public static String post(String url, Map<String, String> params, Headers headers) {
    FormBody.Builder formBuilder = new FormBody.Builder();
    Set<String> keySet = params.keySet();
    for (String key : keySet) {
        formBuilder.add(key, params.get(key));
    }
    return post(url, formBuilder.build(), headers);
}

/**
 * 发送POST请求
 *
 * @param url
 * @param bean
 * @return
 */
public static <T> String post(String url, T bean, Headers headers) {
    FormBody.Builder formBuilder = new FormBody.Builder();
    if (bean != null) {
        BeanMap beanMap = BeanMap.create(bean);
        for (Object key : beanMap.keySet()) {
            formBuilder.add(StringUtil.toString(key), StringUtil.toString(beanMap.get(key)));
        }
    }
    return post(url, formBuilder.build(), headers);
}

/**
 * 发送POST请求
 *
 * @param url
 * @param requestBody
 * @return
 */
public static String post(String url, RequestBody requestBody, Headers headers) {
    Request.Builder builder = new Request.Builder();
    builder.url(url);
    log.debug("post url={}", url);
    if (headers != null && headers.size() > 0) {
        builder.headers(headers);
        log.debug("post headers={}", headers);
    }
    log.debug("post requestBody ={}", requestBody);
    builder.post(requestBody);
    try {
        Response response = client().newCall(builder.build()).execute();
        log.info("url={},protocol:{},code:{},message:{}", url, response.protocol(), response.code(), response.message());
        String string = response.body().string();
        log.debug("response: {}", string);
        if (response.isSuccessful()) {
            return string;
        }
        return null;
    } catch (Exception e) {
        log.debug("url={},onFailure: {}", url, e.getMessage());
        //log.debug("getStackTrace: {}", e.getStackTrace());
    }
    return null;
}

/**
 * 异步 发送POST请求 异步
 *
 * @param url
 * @param requestBody
 * @return
 */
public static void postAsyn(String url, RequestBody requestBody, Headers headers, Callback callback) {
    Request.Builder builder = new Request.Builder();
    builder.url(url);
    log.debug("postAsyn url={}", url);
    if (headers != null && headers.size() > 0) {
        builder.headers(headers);
        log.debug("post headers={}", headers);
    }
    builder.post(requestBody);
    Request request = builder.build();
    client().newCall(request).enqueue(callback);
}

/**
 * 异步 发送get请求  异步
 *
 * @param url
 * @return
 */
public static void getAsyn(String url, Headers headers, Callback callback) {
    Request.Builder builder = new Request.Builder();
    builder.url(url);
    log.debug("getAsyn url={}", url);
    if (headers != null && headers.size() > 0) {
        builder.headers(headers);
        log.debug("get headers={}", headers);
    }
    builder.get();
    Request request = builder.build();
    client().newCall(request).enqueue(callback);
}

/**
 * 发送get请求  异步
 *
 * @param url
 * @return
 */
public static void getAsyn(String url, Callback callback) {
    getAsyn(url, null, callback);
}

/**
 * 发送POST请求
 *
 * @return
 */
public static Callback callbackDemo() {
    return new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            log.info("error message = {}", e.getMessage());
            log.error("e={}", e);
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            log.debug("response= {}", response);
            log.info("response = {}", response.body().string());
        }
    };
}

}

相关文章
|
10天前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
30 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
15天前
|
Java
Java 些许公共工具类
Java 些许公共工具类
12 1
|
2月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
24 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
2月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
2月前
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
38 0
|
3月前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
57 1
|
3月前
|
安全 Java 开发者
Java中的并发工具类与线程安全实现
Java中的并发工具类与线程安全实现
|
4月前
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式
|
3月前
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式
|
3月前
|
并行计算 Java API
Java中的并发工具类详解
Java中的并发工具类详解