zoukankan      html  css  js  c++  java
  • java发送http的get、post请求

    package com.opentrans.otms.kaka.wx.utils;
    
    import java.io.File;
    import java.net.URI;
    import java.nio.charset.Charset;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import com.lcc.handler.CommonResponseHandler;
    import com.lcc.handler.IResponseHandler;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.methods.HttpPut;
    import org.apache.http.config.ConnectionConfig;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.entity.mime.MultipartEntityBuilder;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.util.EntityUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.util.CollectionUtils;
    
    import com.lcc.dto.ActionResult;
    
    public class HttpUtils {
    
        private static Logger LOGGER = LoggerFactory.getLogger(HttpUtils.class);
    
        public static CloseableHttpClient buildHttpClient() {
            HttpClientBuilder httpClientBuilder = HttpClientBuilder.create().useSystemProperties();
            httpClientBuilder.setDefaultConnectionConfig(
                                ConnectionConfig.custom().setCharset(Charset.forName("UTF-8")).build());
            CloseableHttpClient httpClient = httpClientBuilder.build();
            return httpClient;
        }
    
        public static ActionResult get(String url) {
            return get(url, null, null);
        }
    
        public static ActionResult get(String url, Map<String, String> headers) {
            return get(url, null, headers);
        }
    
        public static ActionResult get(String url, List<NameValuePair> params, Map<String, String> headers) {
            ActionResult result = new ActionResult();
            CloseableHttpClient httpClient = buildHttpClient();
            HttpGet request = null;
            try {
                request = new HttpGet(url);
                if (!CollectionUtils.isEmpty(params)) {
                    String str = EntityUtils.toString(new UrlEncodedFormEntity(params));
                    request.setURI(new URI(url + "?" + str));
                }
                if (headers != null) {
                    for (Entry<String, String> entry : headers.entrySet()) {
                        request.addHeader(entry.getKey(), entry.getValue());
                    }
                }
    
                LOGGER.info("Send request: " + request.getURI());
                HttpResponse response = httpClient.execute(request);
                HttpEntity entity = response.getEntity();
                String body = EntityUtils.toString(entity, "UTF-8");
                if (entity != null) {
                    EntityUtils.consume(entity);
                }
                int code = response.getStatusLine().getStatusCode();
                solveResponse(code, body, result, null);
            } catch (Exception e) {
                result.setStatus(ActionResult.FAIL);
                result.setMessage(e.getMessage());
                LOGGER.error("Failed to receive response:", e);
            } finally {
                closeHttpClient(httpClient);
            }
    
            return result;
        }
    
        public static ActionResult post(String url, String content, String contentType) {
            return post(url, content, null, contentType);
        }
    
        public static ActionResult post(String url, String content, Map<String, String> headers, String contentType) {
            return post(url, content, headers, contentType, null);
        }
    
        public static ActionResult post(String url, String content, Map<String, String> headers, String contentType,
                    IResponseHandler responseHandler) {
            ActionResult result = new ActionResult();
            CloseableHttpClient httpClient = buildHttpClient();
            HttpPost request = null;
            try {
                request = new HttpPost(url);
    
                StringEntity payload = new StringEntity(content, "UTF-8");
                payload.setContentType(contentType);
                payload.setContentEncoding("UTF-8");
                request.setEntity(payload);
                if (headers != null) {
                    for (Entry<String, String> entry : headers.entrySet()) {
                        request.addHeader(entry.getKey(), entry.getValue());
                    }
                }
    
                LOGGER.info("Send request: " + request.getURI());
                LOGGER.info("The payload: " + content);
                HttpResponse response = httpClient.execute(request);
                HttpEntity entity = response.getEntity();
                String body = EntityUtils.toString(entity, "UTF-8");
                if (entity != null) {
                    EntityUtils.consume(entity);
                }
                int code = response.getStatusLine().getStatusCode();
                solveResponse(code, body, result, responseHandler);
            } catch (Exception e) {
                result.setStatus(ActionResult.FAIL);
                result.setMessage(e.getMessage());
                LOGGER.error("Failed to receive response:", e);
            } finally {
                closeHttpClient(httpClient);
            }
            return result;
        }
    
        public static ActionResult postFile(String url, Map<String, File> files, Map<String, String> headers,
                String contentType) {
            ActionResult result = new ActionResult();
            CloseableHttpClient httpClient = buildHttpClient();
            HttpPost request = null;
            try {
                request = new HttpPost(url);
    
                if (headers != null) {
                    for (Entry<String, String> entry : headers.entrySet()) {
                        request.addHeader(entry.getKey(), entry.getValue());
                    }
                }
    
                MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
    
                String fileName = "";
                for (Entry<String, File> entry : files.entrySet()) {
                    fileName = entry.getKey();
                    FileBody file = new FileBody(entry.getValue());
                    entityBuilder.addPart(entry.getKey(), file);
                }
                request.setEntity(entityBuilder.build());
                request.setHeader("Content-Disposition", "attachment;filename=" + fileName);
    
                LOGGER.info("Send request: " + request.getURI());
                HttpResponse response = httpClient.execute(request);
                HttpEntity entity = response.getEntity();
                String body = EntityUtils.toString(entity);
                if (entity != null) {
                    EntityUtils.consume(entity);
                }
                int code = response.getStatusLine().getStatusCode();
                solveResponse(code, body, result, null);
            } catch (Exception e) {
                result.setStatus(ActionResult.FAIL);
                result.setMessage(e.getMessage());
                LOGGER.error("Failed to receive response:", e);
            } finally {
                closeHttpClient(httpClient);
            }
            return result;
        }
    
        public static ActionResult put(String url, String content, String contentType) {
            return put(url, content, null, contentType);
        }
    
        public static ActionResult put(String url, String content, Map<String, String> headers, String contentType) {
            ActionResult result = new ActionResult();
            CloseableHttpClient httpClient = buildHttpClient();
            HttpPut request = null;
            try {
                request = new HttpPut(url);
    
                StringEntity payload = new StringEntity(content, "UTF-8");
                payload.setContentType(contentType);
                payload.setContentEncoding("UTF-8");
                request.setEntity(payload);
                if (headers != null) {
                    for (Entry<String, String> entry : headers.entrySet()) {
                        request.addHeader(entry.getKey(), entry.getValue());
                    }
                }
    
                LOGGER.info("Send request: " + request.getURI());
                LOGGER.info("The payload: " + content);
                HttpResponse response = httpClient.execute(request);
                HttpEntity entity = response.getEntity();
                String body = EntityUtils.toString(entity, "UTF-8");
                if (entity != null) {
                    EntityUtils.consume(entity);
                }
                int code = response.getStatusLine().getStatusCode();
                solveResponse(code, body, result, null);
            } catch (Exception e) {
                result.setStatus(ActionResult.FAIL);
                result.setMessage(e.getMessage());
                LOGGER.error("Failed to receive response:", e);
            } finally {
                closeHttpClient(httpClient);
            }
            return result;
        }
    
        private static void solveResponse(int code, String body, ActionResult result, IResponseHandler responseHandler) {
            LOGGER.info("Received response, the code is  " + code + ", the content is" + body);
    
            if (responseHandler == null) {
                responseHandler = new CommonResponseHandler();
            }
    
            responseHandler.processResponse(code, body, result);
        }
    
        private static void closeHttpClient(CloseableHttpClient httpClient) {
            try {
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (Exception e) {
                LOGGER.error("httpclient close exception", e);
            }
        }
    
    }
    上面utils里面用到的IResponseHandler接口
    package com.lcc.handler;
    
    
    import com.lcc.dto.ActionResult;
    
    public interface IResponseHandler {
    
        void processResponse(int code, String body, ActionResult result);
    }

    实现类CommonResponseHandler

    package com.lcc.handler;
    
    import com.lcc.dto.ActionResult;
    import org.apache.http.HttpStatus;
    
    public class CommonResponseHandler implements IResponseHandler {
    
        @Override
        public void processResponse(int code, String body, ActionResult result) {
            if (code == HttpStatus.SC_OK) {
                result.setData(body);
            } else if (code == 421) {
                result.setStatus(ActionResult.UNAUTH);
                result.setMessage("${service.unauth}");
            } else if (code == 531) {
                result.setStatus(ActionResult.INVALID_ACTIVATION_CODE);
                result.setMessage("${service.invalid.token}");
            } else if (code == HttpStatus.SC_INTERNAL_SERVER_ERROR) {
                result.setStatus(ActionResult.FAIL);
                result.setMessage("${service.internal.error}");
            } else if (code == HttpStatus.SC_SERVICE_UNAVAILABLE) {
                result.setStatus(ActionResult.FAIL);
                result.setMessage("${service.unavailable}");
            } else {
                result.setStatus(ActionResult.FAIL);
                result.setMessage(body);
            }
        }
    
    }
    ActionResult类
    package com.lcc.dto;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.persistence.Transient;
    
    import com.lcc.utils.JsonUtils;
    import com.lcc.utils.MsgUtils;
    import org.codehaus.jackson.annotate.JsonIgnore;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    public class ActionResult {
    
        public static final Integer OK = 200;
        public static final Integer FAIL = 0;
        public static final Integer UNAUTH = 421;
        public static final Integer INVALID_ACTIVATION_CODE = 531;
        public static final Integer TRUCK_PLATE_ALREADY_REGISTERED = 532;
        public static final Integer CHOOSE_TRUCK_PLATE = -1;
        public static final Integer NO_TRUCK = -2;
    
        private int status = OK;
        private String message = "ok";
        private Object data;
        private Map<String, Object> extendedData;
    
        public int getStatus() {
            return status;
        }
    
        @Transient
        public boolean isOK() {
            return OK == status;
        }
    
        public void setStatus(int status) {
            this.status = status;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = MsgUtils.get(message);
        }
    
        public Object getData() {
            return data;
        }
    
        @JsonIgnore
        @SuppressWarnings("unchecked")
        public <T> T getValue(String key) {
            if (data instanceof String) {
                return JsonUtils.get((String) data, key);
            }
            if (data instanceof JSONObject) {
                return JsonUtils.get((JSONObject) (data), key);
            }
            if (data instanceof Map) {
                return JsonUtils.get(new JSONObject((Map<String, Object>) data), key);
            }
            return null;
        }
    
        @JsonIgnore
        @SuppressWarnings("unchecked")
        public <T> T getDataEntity() {
            return (T) data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        @JsonIgnore
        @Transient
        public Object getExtendedData() {
            return extendedData;
        }
    
        @SuppressWarnings("unchecked")
        public void setExtendedData(Object value) {
            if (value == null) {
                this.extendedData = null;
            } else {
                if (value instanceof Map) {
                    extendedData = (Map<String, Object>) value;
                } else {
                    if (this.extendedData == null) {
                        extendedData = new HashMap<String, Object>(3);
                    }
                    extendedData.put(String.valueOf(extendedData.size()), value);
                }
            }
        }
    
        public boolean hasExtendedData(String key) {
            if (extendedData == null)
                return false;
    
            return extendedData.containsKey(key);
        }
    
        public Object getExtendedData(String key) {
            if (extendedData == null)
                return null;
    
            return extendedData.get(key);
        }
    
        public void setExtendedData(String key, Object value) {
            if (extendedData == null) {
                extendedData = new HashMap<String, Object>(3);
            }
            extendedData.put(key, value);
        }
    
        public Object removeExtendedData(String key) {
            if (extendedData == null) {
                return null;
            }
            return extendedData.remove(key);
        }
    
        public void onFail(String message) {
            status = ActionResult.FAIL;
            this.message = MsgUtils.get(message);
        }
    
        public void onFail(JSONObject data) {
            status = ActionResult.FAIL;
            this.data = data;
        }
    
        public void onFail(List<?> data) {
            status = ActionResult.FAIL;
            this.data = data;
        }
    
        public static ActionResult fail(String message) {
            ActionResult result = new ActionResult();
            result.onFail(message);
            return result;
        }
    
        public void onOK(Object data) {
            status = ActionResult.OK;
            message = "ok";
            this.data = data;
        }
    
        public static ActionResult ok(Object data) {
            ActionResult result = new ActionResult();
            result.onOK(data);
            return result;
        }
    
        public static ActionResult ok() {
            ActionResult result = new ActionResult();
            return result;
        }
    
        public static ActionResult unauth() {
            ActionResult result = new ActionResult();
            result.setStatus(UNAUTH);
            result.message = "您未登录或未授权。";
            return result;
        }
    
        public static ActionResult build(int status, String message, Object data) {
            ActionResult result = new ActionResult();
            result.status = status;
            result.message = MsgUtils.get(message);
            result.data = data;
            return result;
        }
    
        @Override
        public String toString() {
            return JSON.toJSONString(this);
        }
    }

    ActionResult类里面用到的JsonUtils--------里面的main方法为测试

    package com.lcc.utils;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    public class JsonUtils {
    
        private static Logger LOGGER = LoggerFactory.getLogger(JsonUtils.class);
    
        public static boolean has(JSONObject json, String fullPath) {
            try {
                String[] paths = fullPath.split("\s*\.\s*");
                int len = paths.length;
                String path;
                String key;
                Object current = json;
                for (int i = 0; i < len; i++) {
                    path = paths[i];
                    if (path.isEmpty()) {
                        continue;
                    }
                    if (path.endsWith("]")) {
                        int index = path.indexOf("[");
                        key = path.substring(0, index);
                        current = ((JSONObject) current).get(key);
                        path = path.substring(index + 1);
                        String[] indice = path.replace("[", "").split("\]");
                        for (String indx : indice) {
                            if (indx.isEmpty()) {
                                continue;
                            }
                            int i_indx = Integer.valueOf(indx);
                            if (i_indx >= ((JSONArray) current).size()) {
                                return false;
                            }
                            if (i_indx < 0 && ((JSONArray) current).size() + i_indx < 0) {
                                return false;
                            }
                            if (i_indx < 0) {
                                i_indx = ((JSONArray) current).size() + i_indx;
                            }
                            current = ((JSONArray) current).get(i_indx);
                        }
                    } else {
                        key = path;
                        if (!((JSONObject) current).containsKey(key)) {
                            return false;
                        }
                        current = ((JSONObject) current).get(key);
                    }
                }
                return true;
            } catch (Exception e) {
                LOGGER.error("Error raised when extract the object " + json + ", the path is " + fullPath, e);
                return false;
            }
        }
    
        public static <T> T get(String json, String fullPath) {
            return get(JSON.parseObject(json), fullPath);
        }
        
        @SuppressWarnings("unchecked")
        public static <T> T get(JSONObject json, String fullPath) {
            try {
                String[] paths = fullPath.split("\s*\.\s*");
                int len = paths.length;
                String path;
                String key;
                Object current = json;
                for (int i = 0; i < len; i++) {
                    path = paths[i];
                    if (path.isEmpty()) {
                        continue;
                    }
                    if (path.endsWith("]")) {
                        int index = path.indexOf("[");
                        key = path.substring(0, index);
                        current = ((JSONObject) current).get(key);
                        path = path.substring(index + 1);
                        String[] indice = path.replace("[", "").split("\]");
                        for (String indx : indice) {
                            if (indx.isEmpty()) {
                                continue;
                            }
                            int i_indx = Integer.valueOf(indx);
                            if (i_indx < 0) {
                                i_indx = ((JSONArray) current).size() + i_indx;
                            }
                            current = ((JSONArray) current).get(i_indx);
                        }
                    } else {
                        key = path;
                        current = ((JSONObject) current).get(key);
                    }
                }
                return (T) current;
            } catch (Exception e) {
                LOGGER.error("Error raised when extract the object " + json + ", the path is " + fullPath, e);
                return null;
            }
        }
    
        public static void main(String[] args) {
            String content = "{"user":{"name":"jay","age":30,"favorite":["篮球","编程",[{"name":"吃饭"},{"name":"睡觉"}]]}}";
            JSONObject json = JSON.parseObject(content);
            System.out.println("content is " + json.toJSONString());
            System.out.println("user.name is " + JsonUtils.get(json, "user.name"));
            System.out.println("user.age is " + JsonUtils.get(json, "user.age"));
            System.out.println("user.favorite is " + JsonUtils.get(json, "user.favorite"));
            System.out.println("user.favorite[0] is " + JsonUtils.get(json, "user.favorite[0]"));
            System.out.println("user.favorite[2][1] is " + JsonUtils.get(json, "user.favorite[2][1]"));
            System.out.println("user.favorite[2][1].name is " + JsonUtils.get(json, "user.favorite[2][1].name"));
            System.out.println("user.favorite[-1][1].name is " + JsonUtils.get(json, "user.favorite[-1][1].name"));
            System.out.println("user.favorite[-1][-1].name is " + JsonUtils.get(json, "user.favorite[-1][-1].name"));
            System.out.println("user.favorite[-1][-2].name is " + JsonUtils.get(json, "user.favorite[-1][-2].name"));
            System.out.println(
                    "Is content contains user.favorite[-1][-2].name? " + JsonUtils.has(json, "user.favorite[-1][-2].name"));
        }
    }

    ActionResult里面用到的MsgUtils

    package com.lcc.utils;
    
    import java.util.Locale;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    import org.springframework.web.servlet.support.RequestContext;
    import org.springframework.web.servlet.support.RequestContextUtils;
    
    /**
     * Message utils for i18n
     */
    public class MsgUtils {
    
        public static final String EXP_MSG = "\$\{([^}]*)\}";
    
        public static final String get(String key) {
            if (!key.matches(EXP_MSG))
                return key;
    
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                    .getRequest();
            RequestContext requestContext = new RequestContext(request);
            String pureKey = key.substring(2, key.length() - 1).trim();
            try {
                return requestContext.getMessage(pureKey);
            } catch (Exception e) {
            }
            return "";
        }
    
        public static final String get(String key, String defaultValue) {
            String value = get(key);
            return value.isEmpty() ? get(defaultValue) : value;
        }
    
        public static final String get(String key, String defaultValue1, String defaultValue2) {
            String value = get(key);
            return value.isEmpty() ? get(defaultValue1, defaultValue2) : value;
        }
    
        public static final String get(String key, String... args) {
            String msg = get(key);
            if (args != null && args.length > 0) {
                for (String arg : args) {
                    msg = msg.replace(msg, get(arg));
                }
            }
            return msg;
        }
    
        public static Locale getLocale() {
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                    .getRequest();
            return RequestContextUtils.getLocaleResolver(request).resolveLocale(request);
        }
    }
     
  • 相关阅读:
    栈和队列
    链表
    map
    二叉平衡树旋转
    二叉排序树详情
    红黑树详情
    查并集
    动态规划
    位操作
    字典树
  • 原文地址:https://www.cnblogs.com/cc-java/p/6888719.html
Copyright © 2011-2022 走看看