java使用okhttp请求

需要的包
        <dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
			<version>4.9.1</version>
		</dependency>

 private static final OkHttpClient OKHTTP_CLIENT = new OkHttpClient.Builder()
            .connectTimeout(120, TimeUnit.SECONDS)
            .readTimeout(120,TimeUnit.SECONDS)
            .writeTimeout(120,TimeUnit.SECONDS)
            .build();

    private static final MediaType MEDIA_TYPE = MediaType.get("application/json; charset=utf-8");
    /**
     * OKHTTP  POST 同步请求
     * @param reqUrl  地址
     * @param headers 头部信息
     * @param params 请求参数
     * @return
     */
    public static String okHttpPost(String reqUrl , Map<String,String> headers, Map<String,String> params){
        RequestBody body = RequestBody.create(MEDIA_TYPE, JSONObject.toJSONString(params));
        // 发送请求
        Request request =getReqBuilder(reqUrl,headers).post(body).build();
        try{
            Response response = OKHTTP_CLIENT.newCall(request).execute();
            return response.body().string();
        }catch (Exception e){
            throw  new RuntimeException("HTTP POST同步请求失败 URL:"+reqUrl,e);
        }
    }

    /**
     * OKHTTP GET 同步 请求
     * @param url 地址
     * @param params 参数
     * @return
     */
    public static String okHttpGet(String url, Map<String,String> headers, Map<String,String> params){
        url = getParasmHandle(url,params);
        // 发送请求
        Request request = getReqBuilder(url, headers).build();
        try{
            Response response = OKHTTP_CLIENT.newCall(request).execute();
            return response.body().string();
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return null;
        }
    }


    /**
     * OKHTTP GET 异步 请求
     * @param url 地址
     * @param params 参数
     * @return
     */
    public static void okHttpGetAsyn(String url, Map<String,String> headers, Map<String,String> params,Callback callback){
        url = getParasmHandle(url,params);
        // 发送请求
        Request request = getReqBuilder(url, headers).build();
        try{
            OKHTTP_CLIENT.newCall(request).enqueue(callback);
        }catch (Exception e){
            throw  new RuntimeException("HTTP GET异步请求失败 URL:"+url,e);
        }
    }

    /**
     * OKHTTP  POST 异步请求
     * @param reqUrl  地址
     * @param headers 头部信息
     * @param params 请求参数
     * @return
     */
    public static void okHttpPostAsyn(String reqUrl , Map<String,String> headers, Map<String,String> params,Callback callback){
        RequestBody body = RequestBody.create(MEDIA_TYPE, JSONObject.toJSONString(params));
        // 发送请求
        Request request = getReqBuilder(reqUrl, headers).post(body).build();
        try{
            OKHTTP_CLIENT.newCall(request).enqueue(callback);
        }catch (Exception e){
            throw  new RuntimeException("HTTP POST异步请求失败 URL:"+reqUrl,e);
        }
    }

    /**
     * 初始化 请求
     * @param url
     * @param headers
     * @return
     */
    private static Request.Builder getReqBuilder(String url, Map<String, String> headers){
        Request.Builder builder = new Request.Builder();
        builder.header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36");
        if(headers!=null && !headers.isEmpty()) {
            headers.forEach(builder::addHeader);
        }
        builder.url(url);
        return builder;
    }

    /**
     * GET 请求参数处理
     * @param url
     * @param params
     * @return
     */
    private static String getParasmHandle(String url,Map<String,String> params){
        StringBuilder stringBuilder = new StringBuilder();
        if(params!=null && !params.isEmpty()) {
            params.keySet().forEach(res -> {
                if (StringUtils.isNotBlank(stringBuilder) || url.contains("?")) {
                    stringBuilder.append("&");
                } else {
                    stringBuilder.append("?");
                }
                try {
                    stringBuilder.append(String.format("%s=%s", res, URLEncoder.encode(params.get(res), "UTF-8")));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }

            });
        }
        return url + stringBuilder;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安颜丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值