OKHttp3工具类

Java发送http请求,与RestTemplate功能相同RestTemplate方式发送http请求

1.maven

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

2.HttpUtil

package com.infoview.base.util;

import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 发送Http请求
 */

public class HttpUtil {

    private static final Logger log = LoggerFactory.getLogger(HttpUtil.class);
    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    public static final MediaType XWWWFORMURLENCODED = MediaType
            .parse("application/x-www-form-urlencoded; charset=utf-8");

    /**
     * 发送post请求
     *
     * @param url
     * @param body
     * @return
     */
    public static String postBody(String url, RequestBody body) {
        OkHttpClient httpClient = new OkHttpClient();
        Request request = new Request.Builder().url(url).post(body).build();
        try {
            return httpClient.newCall(request).execute().body().string();
        } catch (IOException e) {
            log.error("HttpUtil postBody error", e);
        }
        return null;
    }

    /**
     * 发送需求检查响应成功的post
     */
    public static String post(String url, Object params) {
        return post(url, params, true);
    }

    /**
     * 发送Post 请求
     *
     * @param url
     * @param params
     * @param checkSuc 是否响检查应成功
     * @return
     */
    public static String post(String url, Object params, boolean checkSuc) {
        OkHttpClient okHttpClient = new OkHttpClient();
        String str = JsonUtil.objToJsonStr(params);
        log.info("postJsonParams:" + str);
        RequestBody requestBody = RequestBody.create(JSON, str);
        Request request = new Request.Builder().url(url).post(requestBody).build();
        try {
            Response response = okHttpClient.newCall(request).execute();
            if (checkSuc) {
                if (response.isSuccessful()) {
                    return response.body().string();
                }
            } else {
                return response.body().string();
            }
        } catch (IOException e) {
            log.error("HttpUtil post error", e);
        }
        return null;
    }

    /*
     *将map 拼接成  name=val&name1=val1
     */
    public static String queryParams(Map<String, Object> params) {
        if (params == null) {
            return null;
        }
        StringBuffer param = new StringBuffer();
        for (String key : params.keySet()) {
            if (param.length() == 0) {
                // param.append("?");
            } else {
                param.append("&");
            }
            try {
                param.append(key).append("=").append(URLEncoder.encode(params.get(key).toString(), "UTF-8"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return param.toString();
    }

    /**
     * 发送get请求
     *
     * @param url 请求地址
     * @return
     */
    public static String get(String url) {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(url).build();
        try {
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                return response.body().string();
            }
        } catch (IOException e) {
            log.error("HttpUtil get error", e);

        }
        return null;
    }

    /**
     * 发送get请求
     *
     * @param url    请求地址
     * @param params 设置参数
     * @return
     */
    public static String get(String url, Map<String, Object> params) {
        String paramsStr = queryParams(params);
        if (paramsStr != null) {
            url = url + "?" + paramsStr;
        }
        return get(url);
    }

    /**
     * 发送post请求
     *
     * @param url       请求地址
     * @param params    设置参数
     * @param headerMap 自定义头部
     * @return
     */
    public static String post(String url, Map<String, Object> params, Map<String, Object> headerMap) {
        return post(url,params,headerMap,JSON);
    }

    public static String post(String url, Map<String, Object> params, Map<String, Object> headerMap,MediaType mediaType) {

        Request.Builder builder = new Request.Builder();
        if (headerMap != null && headerMap.size() > 0) {
            for (String key : headerMap.keySet()) {
                builder.addHeader(key, headerMap.get(key).toString());
            }
        }

        RequestBody requestBody = null;
        if (mediaType.equals(JSON)){
            String paramsStr = JsonUtil.objToJsonStr(params);
            requestBody = RequestBody.create(JSON, paramsStr);
        }else{
            String str = queryParams((Map<String, Object>)params);
            requestBody = RequestBody.create(XWWWFORMURLENCODED, str);
        }

        Request request = builder.url(url).post(requestBody).build();
        try {
            OkHttpClient okHttpClient = new OkHttpClient();
            Response response = okHttpClient.newCall(request).execute();
            if (response.isSuccessful()) {
                return response.body().string();
            } else {
                System.out.println("post fail:" + response.body().string());
            }
        } catch (IOException e) {
            log.error("post fail.err:url -> {},msg" , url, e);
        }
        return null;
    }

    /**
     * 发送get请求
     *
     * @param url       请求地址
     * @param params    设置参数
     * @param headerMap 自定义头部
     * @return
     */
    public static String get(String url, Map<String, Object> params, Map<String, Object> headerMap) {
        OkHttpClient client = new OkHttpClient();
        Request.Builder builder = new Request.Builder();
        if (headerMap != null && headerMap.size() > 0) {
            for (String key : headerMap.keySet()) {
                builder.addHeader(key, headerMap.get(key).toString());
            }
        }

        String paramsStr = queryParams(params);
        if (paramsStr != null) {
            url = url + "?" + paramsStr;
        }
//        System.out.println("header:"+headerMap);
//        System.out.println("url:"+url);

        Request request = builder.url(url).build();
        try {
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                return response.body().string();
            } else {
                System.out.println("get fail:" + response.body().string());
            }
        } catch (IOException e) {
            e.printStackTrace();

        }
        return null;
    }

    /**
     * 上传文件
     *
     * @param url
     * @param paramMap
     * @return
     */
    public static String uploadFile(String url, HashMap paramMap) {
        return cn.hutool.http.HttpUtil.post(url, paramMap);
    }

    /**
     * 加密Post请求
     *
     * @param url
     * @param params
     * @return
     */
    public static Object encryptPost(String url, Object params) {
        OkHttpClient okHttpClient = new OkHttpClient();

        String paramStr = JsonUtil.objToJsonStr(params);
        RequestBody requestBody = RequestBody.create(XWWWFORMURLENCODED, "reqdata=" + paramStr);

        Long crtime = System.currentTimeMillis() / 1000;

        String xToken = EncryptUtil.encrypt(paramStr + crtime);

        Request request = new Request.Builder().url(url).addHeader("X-Token", xToken).addHeader("X-Time", crtime + "")
                .post(requestBody).build();
        try {
            Response response = okHttpClient.newCall(request).execute();
            if (response.isSuccessful()) {
                Map<String, Object> ret = JsonUtil.jsonToMap(response.body().string());

                return ret.get("data");
            }
        } catch (IOException e) {
            log.error("encryptPost error", e);
        }
        return null;
    }

    /**
     * 将响应map字符转成Map对象
     *
     * @param str
     * @return
     */
    public static Map<String, Object> RepDataHandler(String str) {
        if (StringUtil.isEmpty(str))
            return null;
        Map<String, Object> repData = JsonUtil.jsonToMap(str);
        if (OtherUtil.isNull(repData))
            return null;
        return (HashMap<String, Object>) repData.get("data");
    }

    /**
     * 获取响应的字符串
     *
     * @param str
     * @return
     */
    public static String RepStringHandler(String str) {
        if (StringUtil.isEmpty(str))
            return null;
        Map<String, Object> repData = JsonUtil.jsonToMap(str);
        if (OtherUtil.isNull(repData))
            return null;
        return repData.get("data").toString();
    }

    /**
     * 将响应list字符转成list对象
     *
     * @param str
     * @return
     */
    public static List<Map<String, Object>> RepListDataHandler(String str) {
        if (StringUtil.isEmpty(str))
            return null;
        Map<String, Object> repData = JsonUtil.jsonToMap(str);
        if (OtherUtil.isNull(repData))
            return null;
        return (List<Map<String, Object>>) repData.get("data");
    }
}

3.参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值