首页 > 其他分享 >OkHttp Utils

OkHttp Utils

时间:2024-07-26 15:51:58浏览次数:15  
标签:return String url Utils param params OkHttp call

import lombok.extern.slf4j.Slf4j;
import okhttp3.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 使用 okhttp
 * 
 * <dependency>
 *     <groupId>com.squareup.okhttp3</groupId>
 *     <artifactId>okhttp</artifactId>
 * </dependency>
 */

@Slf4j
public class HttpUtil {

    private HttpUtil() {
        //private construct
    }

    private static final OkHttpClient client =
            new OkHttpClient.Builder()
                    .connectTimeout(60, TimeUnit.SECONDS)
                    .readTimeout(60, TimeUnit.SECONDS)
                    .callTimeout(30, TimeUnit.SECONDS)
                    .build();


    public static final MediaType MEDIA_TYPE_JSON = MediaType.get("application/json; charset=utf-8");


    /**
     * 发起Get请求
     *
     * @param url    url
     * @param params 参数
     * @return 响应结果
     */
    public static String doGet(String url, Map<String, Object> params) {
        Call call = createGetCall(url, params);
        return execute(call);
    }

    /**
     * 发起 Post请求, 使用form表单参数
     *
     * @param url    url
     * @param params 参数
     * @return 响应结果
     */
    public static String doPost(String url, Map<String, Object> params) {
        Call call = createPostCall(url, params);
        return execute(call);
    }

    /**
     * 发起 post请求, 使用json参数
     *
     * @param url  url
     * @param json json参数
     * @return resp
     */
    public static String doPost(String url, String json) {
        Call call = createPostJsonCall(url, json);
        return execute(call);
    }


    /**
     * [异步] 发起Get请求
     *
     * @param url      url
     * @param params   参数
     * @param callback 回调方法
     */
    public static void doGetAsync(String url, Map<String, Object> params, Callback callback) {
        Call call = createGetCall(url, params);
        call.enqueue(callback);
    }

    /**
     * [异步] 发起 Post请求
     *
     * @param url    url
     * @param params 参数
     */
    public static void doPostAsync(String url, Map<String, Object> params, Callback callback) {
        Call call = createPostCall(url, params);
        call.enqueue(callback);
    }

    /**
     * [异步] 发起 post请求, 使用json参数
     *
     * @param url  url
     * @param json json参数
     */
    public static void doPostAsync(String url, String json, Callback callback) {
        Call call = createPostJsonCall(url, json);
        call.enqueue(callback);
    }


    /**
     * Get请求, 构造 Call对象
     *
     * @param url    请求url
     * @param params 请求参数
     * @return Call
     */
    private static Call createGetCall(String url, Map<String, Object> params) {

        Request.Builder builder = new Request.Builder();
        Request request = builder.url(url).build();
        // 设置参数
        HttpUrl httpUrl = createHttpUrl(request, params);
        builder.url(httpUrl).build();

        return client.newCall(builder.build());
    }

    /**
     * Post请求, 构造 Call对象
     *
     * @param url    请求url
     * @param params 请求参数
     * @return Call
     */
    private static Call createPostCall(String url, Map<String, Object> params) {
        Request request = new Request.Builder()
                .post(createFormBody(params))
                .url(url)
                .build();
        return client.newCall(request);
    }

    /**
     * Post请求, 构造 Call对象
     *
     * @param url  请求url
     * @param json 请求参数
     * @return Call
     */
    private static Call createPostJsonCall(String url, String json) {
        Request request = new Request.Builder()
                .post(RequestBody.Companion.create(json, MEDIA_TYPE_JSON))
                .url(url)
                .build();
        return client.newCall(request);
    }


    /**
     * 为 get请求设置参数
     *
     * @param request request对象
     * @param params  请求参数
     * @return 设置了参数的 HttpUrl对象
     */
    private static HttpUrl createHttpUrl(Request request, Map<String, Object> params) {
        HttpUrl.Builder urlBuilder = request.url().newBuilder();
        if (params != null && !params.isEmpty()) {
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                urlBuilder.addQueryParameter(entry.getKey(), String.valueOf(entry.getValue()));
            }
        }
        return urlBuilder.build();
    }


    /**
     * 为 post请求设置参数
     *
     * @param params 请求参数
     * @return FormBody
     */
    private static FormBody createFormBody(Map<String, Object> params) {
        FormBody.Builder builder = new FormBody.Builder();
        if (params != null && !params.isEmpty()) {
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                builder.add(entry.getKey(), String.valueOf(entry.getValue()));
            }
        }
        return builder.build();
    }


    /**
     * 同步执行 http请求
     *
     * @param call call对象
     * @return 响应结果
     */
    public static String execute(Call call) {
        String respStr = "";
        try (Response response = call.execute()) {
            ResponseBody body = response.body();
            if (body != null) {
                respStr = new String(body.string().getBytes(), StandardCharsets.UTF_8);
            }
        } catch (IOException e) {
            throw new OkHttpException("Execute http request error reason is " + e.getMessage());
        }
        return respStr;
    }

    public static class OkHttpException extends RuntimeException {
        public OkHttpException(String errorMsg) {
            super(errorMsg);
        }
    }
    

}

参考链接:https://www.cnblogs.com/bobo132/p/15398966.html

标签:return,String,url,Utils,param,params,OkHttp,call
From: https://www.cnblogs.com/lyuSky/p/18325534

相关文章

  • ubuntu安装findutils报错xargs: not found
    因为缺少find所以安装findutilsapt-getinstallfindutils报错说缺少xargs和find,但这俩也是属于findutils的,造成了循环依赖root@ubuntu:/home/mika#apt-getinstallfindutilsReadingpackagelists...DoneBuildingdependencytreeReadingstateinformation...DoneTh......
  • django.db.utils.OperationalError:无法翻译主机名“postgres.railway.internal”
    django.db.utils.OperationalError:无法将主机名“postgres.railway.internal”翻译为地址:提供的节点名或服务名,或未知我的django项目运行良好,直到将setting.py文件更改为使用铁路提供的变量将其部署在铁路中。从那时起我无法运行serv或迁移,我收到此错误...这里是数据......
  • RNN 中未找到 rnn_utils 模块
    我需要使用这个库来构建我的模型,但是当我遇到此错误时。fromrnn_utilsimport*没有名为“rnn_utils”的模块遇到错误“ModuleNotFoundError:Nomodulenamed'rnn_utils'”是因为Python中没有内置的模块叫做“rnn_utils”。该模块不是标准Python库的一部分,也不......
  • 【Android面试八股文】谈谈OkHttp框架的原理(深度剖析源码)
    文章目录一、OkHttp介绍二、OkHttp使用流程三、OkHttp的分发器Dispatcher3.1Dispatcher3.2同步请求3.3异步请求四、OKHttp的请求流程五、分发器线程池六、拦截器责任链6.1责任链模式6.1.1故事背景6.1.2责任链模式实现6.2OkHttp的拦截器流程......
  • 【HarmonyOS NEXT】鸿蒙解析JSON字符串 ArkTSUtils.ASON
    为支持将JSON字符串解析成共享数据,ArkTS语言基础库新增了ASON工具。ASON支持开发者解析JSON字符串,并生成共享数据进行跨并发域传输,同时ASON也支持将共享数据转换成JSON字符串。ISendabletypeISendable=lang.ISendableISendable是所有Sendable类型(除null和undefined)的父类......
  • [Java SE] 字节操作工具类:ByteUtils
    0引言与嵌入式软件数据交互过程中,必然涉及各种的、大量的字节操作场景。如:16进制与10进制、2进制间的转换,字符串、byte数组与int之间的转换等。故此有此核心工具类的沉淀。1ByteUtils依赖<properties> <!--编程提效工具--> <lombok.version>1.18.22</lombok.version>......
  • Python的utils库详解
    Python的utils库并不是一个官方标准库,而是指一系列提供实用功能的工具库或模块,这些库或模块通常包含了一系列帮助开发人员加速日常工作、提高开发效率的工具函数或类。由于Python社区的开放性和活跃性,存在多个不同的utils库,每个库都有其特定的功能和用途。不过,尽管没有一个统一......
  • OKhttp3
    okHttp3restTemplate引入//创建ConnectionPoolConnectionPoolconnectionPool=newConnectionPool(5,5,TimeUnit.MINUTES);//创建OkHttpClient并设置参数OkHttpClientokHttpClient=newOkHttpClient.Builder().connectio......
  • Okhttp调用第三方系统接口【随记】
    Okhttp调用第三方系统接口依赖<dependency>  <groupId>com.squareup.okhttp3</groupId>  <artifactId>okhttp</artifactId>  <version>4.9.1</version></dependency>importokhttp3.OkHttpClient;importokhttp3.Reque......
  • Android网络请求:协程+Flow+Retrofit+OkHttp
    在Android开发中,网络请求是一个很常见的任务。随着Kotlin协程和Flow的流行,我们有了新的工具来优雅地处理网络请求。结合Retrofit和OkHttp,我们可以构建一个强大的、易于理解和维护的网络请求框架。一、Kotlin协程与FlowKotlin协程是Kotlin提供的一种轻量级线程管理方式。它......