Http请求工具类

一、引入架包
<!-- httpclient 依赖包-->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.17</version>
</dependency>
二、HttpUtil工具类
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.*;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;

import javax.net.ssl.SSLContext;
import java.io.*;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.*;

public class HttpUtil {
    public static final String GET = "get";
    public static final String POST = "post";
    public static final String CHARSET = "UTF-8";

    private static RequestConfig requestConfig;

    static {
        //设置http的状态参数
        requestConfig = RequestConfig.custom()
                .setSocketTimeout(5000)
                .setConnectTimeout(5000)
                .setConnectionRequestTimeout(5000)
                .build();
    }

    /**
     * GET 请求
     *
     * @param url 请求URL
     * @return
     */
    public static String doGet(String url) {
        return doSend(GET, url, null, CHARSET, false);
    }

    /**
     * GET 请求
     *
     * @param url    请求URL
     * @param params 请求参数
     * @return
     */
    public static String doGet(String url, Map<String, Object> params) {
        return doSend(GET, url, params, CHARSET, false);
    }

    /**
     * POST 请求
     *
     * @param url 请求URL
     * @return
     */
    public static String doPost(String url) {
        return doSend(POST, url, null, CHARSET, false);
    }

    /**
     * POST 请求
     *
     * @param url    请求URL
     * @param params 请求参数
     * @return
     */
    public static String doPost(String url, Map<String, Object> params) {
        return doSend(POST, url, params, CHARSET, false);
    }

    /**
     * https POST 请求
     *
     * @param url 请求URL
     * @return
     */
    public static String doPostSSL(String url) {
        return doSend(POST, url, null, CHARSET, true);
    }

    /**
     * https POST 请求
     *
     * @param url    请求URL
     * @param params 请求参数
     * @return
     */
    public static String doPostSSL(String url, Map<String, Object> params) {
        return doSend(POST, url, params, CHARSET, true);
    }

    /**
     * json 参数方式POST提交
     *
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, JSONObject params) {
        return doSend(POST, url, params, CHARSET, false);
    }


    /**
     * HTTP请求
     *
     * @param method    请求方式("post","get")
     * @param url       请求的url地址
     * @param params    请求的参数
     * @param charset   编码格式
     * @param enableSSL 是否开启SSL
     * @return
     */
    public static String doSend(String method, String url, Map<String, Object> params, String charset, boolean enableSSL) {
        if (StringUtils.isBlank(url)) {
            return null;
        }
        CloseableHttpClient httpClient;
        CloseableHttpResponse response = null;
        if (enableSSL) { // https  注意这里获取https内容,使用了忽略证书的方式,当然还有其他的方式来获取https内容
            httpClient = HttpUtil.createSSLClientDefault();
        } else {
            httpClient = HttpClients.createDefault();
        }
        try {
            HttpUriRequest httpUriRequest = getRequestMethod(params, url, method);
            response = httpClient.execute(httpUriRequest);
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode != 200) {
                httpUriRequest.abort();
                throw new RuntimeException("HttpClient,error status code :" + statusCode);
            }
            HttpEntity entity = response.getEntity();
            String result = null;
            if (entity != null) {
                result = EntityUtils.toString(entity, StringUtils.isEmpty(charset) ? CHARSET : charset);
            }
            EntityUtils.consume(entity);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (httpClient != null)
                    httpClient.close();
                if (response != null)
                    response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return null;
    }


    /**
     * 获取请求
     *
     * @param params 请求的参数
     * @param url    请求的URL
     * @param method 请求方式
     * @return
     */
    public static HttpUriRequest getRequestMethod(Object params, String url, String method) throws UnsupportedEncodingException {
        HttpUriRequest reqMethod = null;
        if (params.getClass() == Map.class) { // map参数
            // 创建参数队列
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            if (params != null && !((Map<String, Object>) params).isEmpty()) {
                for (Map.Entry<String, Object> entry : ((Map<String, Object>) params).entrySet()) {
                    nameValuePairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
                }
            }
            if (POST.equals(method)) {
                reqMethod = RequestBuilder.post().setUri(url)
                        .addParameters(nameValuePairs.toArray(new BasicNameValuePair[params == null ? 0 : ((Map<String, Object>) params).size()]))
                        .setConfig(requestConfig).build();
            } else if (GET.equals(method)) {
                reqMethod = RequestBuilder.get().setUri(url)
                        .addParameters(nameValuePairs.toArray(new BasicNameValuePair[params == null ? 0 : ((Map<String, Object>) params).size()]))
                        .setConfig(requestConfig).build();
            }
        } else if (params.getClass() == JSONObject.class) { // json参数
            StringEntity entity = new StringEntity(((JSONObject) params).toJSONString());
            entity.setContentEncoding(CHARSET);
            entity.setContentType("application/json");//发送json数据需要设置contentType
            if (POST.equals(method)) {
                reqMethod = RequestBuilder.post().setUri(url)
                        .setEntity(entity)
                        .setConfig(requestConfig).build();
            } else if (GET.equals(method)) {
                reqMethod = RequestBuilder.get().setUri(url)
                        .setEntity(entity)
                        .setConfig(requestConfig).build();
            }
        }
        return reqMethod;
    }

    /**
     * 这里创建了忽略整数验证的CloseableHttpClient对象
     *
     * @return
     */
    private static CloseableHttpClient createSSLClientDefault() {
        try {
            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                // 信任所有
                public boolean isTrusted(X509Certificate[] chain, String authType) {
                    return true;
                }
            }).build();
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
            return HttpClients.custom().setSSLSocketFactory(sslsf).build();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        }
        return HttpClients.createDefault();
    }

    /**
     * Map 转 JSONObject
     *
     * @param map
     * @return
     */
    public static JSONObject toJsonObj(Map<String, String> map) {
        JSONObject resultJson = new JSONObject();
        Iterator it = map.keySet().iterator();
        while (it.hasNext()) {
            String key = (String) it.next();
            resultJson.put(key, map.get(key));
        }
        return resultJson;
    }
三、使用示例
public static void main(String[] args) {
        String url = "https://www.open.com";
        Map<String, Object> map = new HashMap();
        map.put("appId", "a5949221470c4059b9b0b45a90c81527");
        map.put("timestamp", "1414587457");
        Map res = (Map) JSON.parse(HttpUtil.doPost(url, HttpUtil.toJsonObj(map)));
        System.out.println(res);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343