http抽象类实现post和get方法

public class HttpBase {
    private static final String CHARSET = "UTF-8";
    private static final String returnType = "application/json";
    private static CloseableHttpClient httpClient=null;
    private static CloseableHttpResponse response=null;
    private static CookieStore cookieStore = null;
    private static final Logger LOG = LoggerFactory.getLogger(HttpBase.class);

    /**
     *
     * @param url  请求url
     * @param json 请求参数 json类型
     * @param methodType 方法模式
     * @param contentType   实体正文类型
     * @return 返回字符串
     */
    protected static String requestReString(String url, JsonObject json, String methodType, String contentType) {
        String result = null;
        LOG.info("请求url {}",url + ",开始");
        try {
            httpClient = HttpClients.createDefault();//使用CloseableHttpClient的工厂类HttpClients的方法来创建实例
            if(methodType.equals("POST")){
                HttpPost httpPost = new HttpPost(url);
                if ("application/json".equals(contentType)) {
                    try {
                        System.err.println("json----------------------===========---------" + json.toString());
                        StringEntity requestEntity = new StringEntity(json.toString(), CHARSET);
                        httpPost.setEntity(requestEntity);
                        httpPost.setHeader("Content-type",contentType);
                        url = URLDecoder.decode(url, CHARSET);
                        System.out.println("http post为:"+ httpPost);
                        response = httpClient.execute(httpPost);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }

                else if ("application/octet-stream".equals(contentType)) {
                    try {
//                        StringEntity requestEntity = new StringEntity(json.getString("data"), CHARSET);

                        HttpEntity requestEntity = (HttpEntity)json.get("entity");

                        httpPost.setEntity(requestEntity);
                        httpPost.setHeader("Content-type",contentType);
                        url = URLDecoder.decode(url, CHARSET);
//                        System.out.println("http post为:"+ json.getString("data"));
                        System.out.println("http post为:"+ httpPost);
                        response = httpClient.execute(httpPost);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
                else {
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    if (json != null) {
                        System.out.println(json.toString());
                        if (json.size() > 0) {
                            for (String key : json.keySet()) {
                                if(json.get(key) == null) {
                                    params.add(new BasicNameValuePair(key, ""));
                                }else{

                                    params.add(new BasicNameValuePair(key, "" + json.get(key)));
                                }
                            }
                        }

                    }
                    StringEntity requestEntity = new UrlEncodedFormEntity(params, CHARSET);
                    requestEntity.setContentType(contentType);
                    requestEntity.setContentEncoding("UTF-8");
                    httpPost.setEntity(requestEntity);
                    url = URLDecoder.decode(url, CHARSET);
                    System.out.println(params);
                    response = httpClient.execute(httpPost);
                }
            }
            else if(methodType.equals("GET")){
                if (json != null) {
                    url += getUrlParam(json);
                }
                HttpGet httpGet = new HttpGet(url);
                httpGet.addHeader("Accept", contentType);
                httpGet.addHeader("Accept-Charset", CHARSET);
                //add id58 by zhengxuesheng
                httpGet.addHeader(new BasicHeader("Cookie", "id58=c5/njVx+SUAtLtIkBTvTAg=="));
                response = httpClient.execute(httpGet);
            }
            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {
                result = EntityUtils.toString(responseEntity, CHARSET);
            }
        } catch (Exception e) {
            LOG.error("httpclient调用异常: {}",e.getMessage());
            e.printStackTrace();
        } finally {
            try {
                if (response!=null) {
                    response.close();
                }
                if (httpClient!=null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        LOG.info("请求url {}",url + ",结束");
        return result;
    }

    /**
     * 用于PMS项目
     * @param url  请求url
     * @param json 请求参数 json类型
     * @param methodType 方法模式
     * @param contentType   实体正文类型
     * @return 返回字符串
     */
    @Deprecated
    protected static String requestWithHeaderReString(String url, JSONObject headersjson, JsonObject json, String methodType, String contentType) {
        String result = null;
        LOG.info("请求url {}",url + ",开始");
        try {
            httpClient = HttpClients.createDefault();
            if(methodType.equals("POST")){
                HttpPost httpPost = new HttpPost(url);
                //Post添加header
                if (headersjson != null) {
                    if (headersjson.size() > 0) {
                        for (String key : headersjson.keySet()) {
                            if(headersjson.get(key) == null) {
                                httpPost.setHeader(key,"");
                            }else{
                                httpPost.setHeader(key,headersjson.getString(key));
                            }
                        }
                    }

                }
                if ("application/json".equals(contentType)) {
                    try {
                        System.err.println("jsonjson-----------------------===========---------" + json.toString());
                        StringEntity requestEntity = new StringEntity(json.toString(), CHARSET);
                        httpPost.setEntity(requestEntity);
                        httpPost.setHeader("Content-type",contentType);
                        url = URLDecoder.decode(url, CHARSET);
                        System.out.println("http post为:"+ httpPost);
                        response = httpClient.execute(httpPost);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }else{
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    if (json != null) {
                        if (json.size() > 0) {
                            for (String key : json.keySet()) {
                                if(json.get(key) == null) {
                                    params.add(new BasicNameValuePair(key, ""));
                                }else{
                                    System.out.println("post入参-key:"+key+"|value:"+json.get(key));
                                    params.add(new BasicNameValuePair(key, "" + json.get(key)));
                                }
                            }
                        }
                    }
                    StringEntity requestEntity = new UrlEncodedFormEntity(params, CHARSET);
                    requestEntity.setContentType(contentType);
                    requestEntity.setContentEncoding("UTF-8");
                    httpPost.setEntity(requestEntity);
                    url = URLDecoder.decode(url, CHARSET);
                    response = httpClient.execute(httpPost);
                }
            }
            else if(methodType.equals("GET")){
                if (json != null) {
                    url += getUrlParam(json);
                }
                HttpGet httpGet = new HttpGet(url);
                httpGet.addHeader("Accept", contentType);
                httpGet.addHeader("Accept-Charset", CHARSET);
                //Get添加header
                if (headersjson != null) {
                    if (headersjson.size() > 0) {
                        for (String key : headersjson.keySet()) {
                            if(headersjson.get(key) == null) {
                                httpGet.addHeader(key,"");
                            }else{
                                httpGet.addHeader(key,headersjson.getString(key));
                            }
                        }
                    }
                }
                response = httpClient.execute(httpGet);
            }
            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {
                result = EntityUtils.toString(responseEntity, CHARSET);
            }
        } catch (Exception e) {
            LOG.error("httpclient调用异常: {}",e.getMessage());
            e.printStackTrace();
        } finally {
            try {
                if (response!=null) {
                    response.close();
                }
                if (httpClient!=null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        LOG.info("请求url {}",url + ",结束");
        return result;
    }

    /**
     * 从redis中获取ppu值
     * @param url
     * @param json
     * @param methodType
     * @param contentType
     * @return
     */
    protected static String requestWithredisCookie(String url, JsonObject json, String methodType, String contentType){
        return requestWithCookieReString(url, RedisUtil.get("PPU_value"), json, methodType, contentType);
    }

    /**
     * 用于商家后台项目
     * @param url  请求url
     * @param json 请求参数 json类型
     * @param methodType 方法模式
     * @param contentType   实体正文类型
     * @return 返回字符串
     */
    protected static String requestWithCookieReString(String url, String ppu_value, JsonObject json, String methodType, String contentType) {
        String result = null;
        String domain = ".58.com";
        String path = "/";
        try {
//          保存PPU进入cookie,并设置domain和path
            cookieStore = new BasicCookieStore();
            BasicClientCookie cookie = new BasicClientCookie("PPU",ppu_value);
            cookie.setSecure(false);
            cookie.setDomain(domain);
            cookie.setPath(path);
            cookieStore.addCookie(cookie);
            if(domain != null) cookie.setAttribute("domain", domain);
            if(path != null) cookie.setAttribute("path", path);

//          new一个带cookie的httplient
            httpClient = HttpClients.custom()
                    .setDefaultCookieStore(cookieStore)
                    .build();
            if(methodType.equals("POST")){
                HttpPost httpPost = new HttpPost(url);
//                httpPost.setHeader("Content-type",contentType);
                httpPost.setHeader("uid",RedisUtil.get("uid_value"));
                httpPost.setHeader("referer","https://houserent.m.58.com");
                if ("application/json".equals(contentType)) {
                    try {
                        System.err.println("json-----------------------===========---------" + json.toString());
                        StringEntity requestEntity = new StringEntity(json.toString(), CHARSET);
                        httpPost.setEntity(requestEntity);
                        httpPost.setHeader("Content-type",contentType);
//                        httpPost.setHeader("uid",RedisUtil.get("uid_value"));
                        url = URLDecoder.decode(url, CHARSET);
                        System.out.println("http post为:"+ httpPost);
                        response = httpClient.execute(httpPost);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }else if("text/plain".equals(contentType)){
                    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                    if (json != null) {
                        if (json.size() > 0) {
                            for (String key : json.keySet()) {
                                if(json.get(key) == null) {
                                    builder.addTextBody(key, "");
                                }else if("file".equals(key)){
                                    builder.addBinaryBody(key,(File)json.get(key));
                                }else{
                                    builder.addTextBody(key, "" + json.get(key));
                                }
                            }
                        }
                    }
                    httpPost.setEntity(builder.build());
                    response = httpClient.execute(httpPost);
                }else{
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    if (json != null) {
                        if (json.size() > 0) {
                            for (String key : json.keySet()) {
                                if(json.get(key) == null) {
                                    params.add(new BasicNameValuePair(key, ""));
                                }else{
                                    params.add(new BasicNameValuePair(key, "" + json.get(key)));
                                }
                            }
                        }

                    }
                    StringEntity requestEntity = new UrlEncodedFormEntity(params, CHARSET);
                    requestEntity.setContentType(contentType);
                    requestEntity.setContentEncoding("UTF-8");
                    httpPost.setEntity(requestEntity);
                    url = URLDecoder.decode(url, CHARSET);
                    response = httpClient.execute(httpPost);
                }
            }
            else if(methodType.equals("GET")){
                if (json != null) {
                    url += getUrlParam(json);
                }
                HttpGet httpGet = new HttpGet(url);
                httpGet.addHeader("Accept", contentType);
                httpGet.addHeader("Accept-Charset", CHARSET);
                httpGet.addHeader("ID58","1234456778");
                response = httpClient.execute(httpGet);
            }
            //拿res返回的cookie
            List<Cookie> cookies = cookieStore.getCookies();
            for (int i = 0; i < cookies.size(); i++) {
                cookieStore.addCookie(cookies.get(i));
                System.out.println("Local cookie: " + cookies.get(i));
            }

            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {
                result = EntityUtils.toString(responseEntity, CHARSET);
            }
        } catch (Exception e) {
            LOG.error("httpclient调用异常: {}",e.getMessage());
            e.printStackTrace();
        } finally {
            try {
                if (response!=null) {
                    response.close();
                }
                if (httpClient!=null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        LOG.info("请求url {}",url + ",结束");
        return result;
    }

    /**
     * 把header里的参数透传
     * @param url  请求url
     * @param json 请求参数 json类型
     * @param methodType 方法模式
     * @param contentType   实体正文类型
     * @return 返回字符串
     */
    protected static String requestWithCookieMapReString(String url, HashMap<String,String> cookieMap, JsonObject json, String methodType, String contentType) {
        String result = null;
        String domain = cookieMap.get("domain");
        String path = cookieMap.get("path");
        try {
//          保存PPU进入cookie,并设置domain和path
            cookieStore = new BasicCookieStore();
            BasicClientCookie cookie = null;
            if(domain.startsWith("anjuke")){
                cookie = new BasicClientCookie("ajkAuthTicket",cookieMap.get("ajkAuthTicket"));
            }else{
                cookie = new BasicClientCookie("PPU",cookieMap.get("PPU"));
            }
            cookie.setSecure(false);
            cookie.setDomain(domain);
            cookie.setPath(path);
            cookieStore.addCookie(cookie);
            if(domain != null) cookie.setAttribute("domain", domain);
            if(path != null) cookie.setAttribute("path", path);

//          new一个带cookie的httplient
            httpClient = HttpClients.custom()
                    .setDefaultCookieStore(cookieStore)
                    .build();
            if(methodType.equals("POST")){
                HttpPost httpPost = new HttpPost(url);
                httpPost.setHeader("uid",RedisUtil.get("uid_value"));
                httpPost.setHeader("referer","https://houserent.m.58.com");
                if ("application/json".equals(contentType)) {
                    try {
                        System.err.println("json-----------------------===========---------" + json.toString());
                        StringEntity requestEntity = new StringEntity(json.toString(), CHARSET);
                        httpPost.setEntity(requestEntity);
                        httpPost.setHeader("Content-type",contentType);
//                        httpPost.setHeader("PPU",ppu_value);
                        url = URLDecoder.decode(url, CHARSET);
                        System.out.println("http post为:"+ httpPost);
                        response = httpClient.execute(httpPost);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }else if("text/plain".equals(contentType)){
                    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                    if (json != null) {
                        if (json.size() > 0) {
                            for (String key : json.keySet()) {
                                if(json.get(key) == null) {
                                    builder.addTextBody(key, "");
                                }else if("file".equals(key)){
                                    builder.addBinaryBody(key,(File)json.get(key));
                                }else{
                                    builder.addTextBody(key, "" + json.get(key));
                                }
                            }
                        }
                    }
                    httpPost.setEntity(builder.build());
                    response = httpClient.execute(httpPost);
                }else {
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    if (json != null) {
                        if (json.size() > 0) {
                            for (String key : json.keySet()) {
                                if(json.get(key) == null) {
                                    params.add(new BasicNameValuePair(key, ""));
                                }else{

                                    params.add(new BasicNameValuePair(key, "" + json.get(key)));
                                }
                            }
                        }

                    }
                    StringEntity requestEntity = new UrlEncodedFormEntity(params, CHARSET);
                    requestEntity.setContentType(contentType);
                    requestEntity.setContentEncoding("UTF-8");
                    httpPost.setEntity(requestEntity);
                    url = URLDecoder.decode(url, CHARSET);
                    response = httpClient.execute(httpPost);
                }
            }
            else if(methodType.equals("GET")){
                if (json != null) {
                    url += getUrlParam(json);
                }
                HttpGet httpGet = new HttpGet(url);
                httpGet.addHeader("Accept", contentType);
                httpGet.addHeader("Accept-Charset", CHARSET);
                response = httpClient.execute(httpGet);
            }
            //拿res返回的cookie
            List<Cookie> cookies = cookieStore.getCookies();
            for (int i = 0; i < cookies.size(); i++) {
                cookieStore.addCookie(cookies.get(i));
                System.out.println("Local cookie: " + cookies.get(i));
            }

            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {
                result = EntityUtils.toString(responseEntity, CHARSET);
            }
        } catch (Exception e) {
            LOG.error("httpclient调用异常: {}",e.getMessage());
            e.printStackTrace();
        } finally {
            try {
                if (response!=null) {
                    response.close();
                }
                if (httpClient!=null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        LOG.info("请求url {}",url + ",结束");
        return result;
    }

    /**
     * 把header和cookie里的参数全都透传过去
     * @param url  请求url
     * @param json 请求参数 json类型
     * @param methodType 方法模式
     * @param contentType   实体正文类型
     * @return 返回字符串
     */
    protected static String requestWithCookieMapAndHeaderMap(String url, HashMap<String,String> cookieMap, HashMap<String,String> userCookieMap, HashMap<String,String> headerMap, JsonObject json, String methodType, String contentType) {
        String result = null;
        String domain = cookieMap.get("domain");
        String path = cookieMap.get("path");
        try {
//          保存PPU进入cookie,并设置domain和path
            cookieStore = new BasicCookieStore();
            BasicClientCookie cookie = null;
            if(domain.startsWith("anjuke")){
                cookie = new BasicClientCookie("ajkAuthTicket",cookieMap.get("ajkAuthTicket"));
            }else{
                cookie = new BasicClientCookie("PPU",cookieMap.get("PPU"));
            }
            cookie.setSecure(false);
            cookie.setDomain(domain);
            cookie.setPath(path);
            cookieStore.addCookie(cookie);
            if(domain != null) cookie.setAttribute("domain", domain);
            if(path != null) cookie.setAttribute("path", path);
            //遍历userHashMap
            if(userCookieMap!=null) {
                for(String key:userCookieMap.keySet()){
                    cookieStore.addCookie(new BasicClientCookie(key,userCookieMap.get(key)));
                }
            }
            // 获取cookie
            List<Cookie> cookies = cookieStore.getCookies();
            for (Cookie c : cookies) {
                System.out.println("Local Cookie:" + c);
            }
//          new一个带cookie的httplient
            httpClient = HttpClients.custom()
                    .setDefaultCookieStore(cookieStore)
                    .build();
            if(methodType.equals("POST")){
                HttpPost httpPost = new HttpPost(url);
                httpPost.setHeader("uid",RedisUtil.get("uid_value"));
                //遍历headerMap
                if(headerMap!=null){
                    for(String key:headerMap.keySet()){
                        httpPost.setHeader(key,headerMap.get(key));
                    }
                }
                if ("application/json".equals(contentType)) {
                    try {
                        System.err.println("json-----------------------===========---------" + json.toString());
                        StringEntity requestEntity = new StringEntity(json.toString(), CHARSET);
                        httpPost.setEntity(requestEntity);
                        httpPost.setHeader("Content-type",contentType);
//                        httpPost.setHeader("PPU",ppu_value);
                        url = URLDecoder.decode(url, CHARSET);
                        System.out.println("http post为:"+ httpPost);
                        response = httpClient.execute(httpPost);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }else if("text/plain".equals(contentType)){
                    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
                    if (json != null) {
                        if (json.size() > 0) {
                            for (String key : json.keySet()) {
                                if(json.get(key) == null) {
                                    builder.addTextBody(key, "");
                                }else if("file".equals(key)){
                                    builder.addBinaryBody(key,(File)json.get(key));
                                }else{
                                    builder.addTextBody(key, "" + json.get(key));
                                }
                            }
                        }
                    }
                    httpPost.setEntity(builder.build());
                    response = httpClient.execute(httpPost);
                }else {
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    if (json != null) {
                        if (json.size() > 0) {
                            for (String key : json.keySet()) {
                                if(json.get(key) == null) {
                                    params.add(new BasicNameValuePair(key, ""));
                                }else{

                                    params.add(new BasicNameValuePair(key, "" + json.get(key)));
                                }
                            }
                        }

                    }
                    StringEntity requestEntity = new UrlEncodedFormEntity(params, CHARSET);
                    requestEntity.setContentType(contentType);
                    requestEntity.setContentEncoding("UTF-8");
                    httpPost.setEntity(requestEntity);
                    url = URLDecoder.decode(url, CHARSET);
                    response = httpClient.execute(httpPost);
                }
            }
            else if(methodType.equals("GET")){
                if (json != null) {
                    url += getUrlParam(json);
                }
                HttpGet httpGet = new HttpGet(url);
                httpGet.addHeader("Accept", contentType);
                httpGet.addHeader("Accept-Charset", CHARSET);
                //遍历headerMap
                if(headerMap!=null){
                    for(String key:headerMap.keySet()){
                        httpGet.addHeader(key,headerMap.get(key));
                    }
                }
                response = httpClient.execute(httpGet);
            }
            //拿res返回的cookie
//            List<Cookie> cookies = cookieStore.getCookies();
//            for (int i = 0; i < cookies.size(); i++) {
//                cookieStore.addCookie(cookies.get(i));
//                System.out.println("Local cookie: " + cookies.get(i));
//            }

            HttpEntity responseEntity = response.getEntity();

            if (responseEntity != null) {
                result = EntityUtils.toString(responseEntity, CHARSET);
            }
        } catch (Exception e) {
            LOG.error("httpclient调用异常: {}",e.getMessage());
            e.printStackTrace();
        } finally {
            try {
                if (response!=null) {
                    response.close();
                }
                if (httpClient!=null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        LOG.info("请求url {}",url + ",结束");
        return result;
    }

    /**
     * get参数组装
     * @param
     * @return
     */
    private static String getUrlParam(JsonObject json){
        StringBuffer url = new StringBuffer();
        if (!json.isEmpty() && json.size()>0) {
            url.append("?");
            for (String key : json.keySet()) {
                try {
                    url.append(key + "=" + URLEncoder.encode(json.get(key).toString(), CHARSET) + "&");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            url.deleteCharAt(url.length()-1);
        }
        LOG.info("get请求的参数 {}", url.toString());
        return url.toString();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值