`
conkeyn
  • 浏览: 1528892 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

HttpRequestClient

    博客分类:
  • Java
 
阅读更多

http请求工具

public class WebConstant {

	// HTTP参数传递方式
	public final static int by_header = 1;
	public final static int by_params = 2;
}

 

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;


/**
 * 操作HttpServletRequest的参数(以后可能通过类似ServletRequestWrapper实现)
 *
 * @author ybbk
 * @date Jun 5, 2009 2:55:16 PM
 * @version 0.0.1-snapshot
 */
public class ParamUtils {

  /**
   * 对参数按字典升序排序 ,并且去掉不需要的参数<br>
   * 
   * @param params
   * @param ignoreParams
   * @return
   */
  public static Map<String, Object> sortParams(Map<String, Object> params,
          List<String> ignoreParams) {
    Collection<String> keyset = params.keySet();
    List<String> list = new ArrayList<String>(keyset);

    // 对key键值按字典升序排序
    Collections.sort(list);

    // 签名步骤一:按字典排序参数
    Map<String, Object> result = new TreeMap<String, Object>();
    for (Iterator<String> it = list.iterator(); it.hasNext();) {
      String key = it.next();
      if (ignoreParams != null && ignoreParams.contains(key)) {
        continue;
      }
      result.put(key, params.get(key));
    }

    return result;
  }

  /**
   * 作用:格式化参数, name=xx&age=xx
   * 
   * @param params
   * @param urlencode
   * @param escapeBlank 是否去掉值是空的参数
   * @return
   * @throws UnsupportedEncodingException
   */
  public static String formatParamMap(Map<String, Object> params, boolean needEncode,
          boolean escapeBlank, String charSet) throws UnsupportedEncodingException {

    StringBuilder sb = new StringBuilder();
    for (Iterator<String> it = params.keySet().iterator(); it.hasNext();) {
      String key = it.next();
      Object value = params.get(key);
      if (value == null && escapeBlank) {
        continue;
      } else {
        if (value instanceof String) {
          String str = (String) value;
          if (StringUtils.isBlank(str) && escapeBlank) {
            continue;
          } else {
            if (needEncode) {
              value = URLEncoder.encode(value + "", charSet);
            }
          }
        }
      }
      sb.append(key).append("=").append(value).append("&");
    }
    String result = sb.toString();
    if (result.length() > 0) {
      result = result.substring(0, result.length() - 1);
    }
    return result;
  }

  /**
   * 去掉空白的参数
   * 
   * @param params
   * @param needEncode
   * @param charSet
   * @return
   * @throws UnsupportedEncodingException
   */
  public static String formatParamMap(Map<String, Object> params, boolean needEncode,
          String charSet) throws UnsupportedEncodingException {

    return formatParamMap(params, needEncode, true, charSet);
  }

  /**
   * 模糊匹配某类参数值,如new-img-*
   * 
   * @param request
   * @param paramNamePrefix
   * @return
   */
  public static List<String> getValues(HttpServletRequest request, String paramNamePrefix) {
    Map requestParams = request.getParameterMap();
    List<String> results = new ArrayList<String>();
    for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
      String name = (String) iter.next();
      if (name.startsWith(paramNamePrefix)) {
        String[] values = (String[]) requestParams.get(name);
        for (String value : values) {
          results.add(value);
        }
      }
    }
    return results;

  }

  /**
   * 模糊匹配某类参数名称,如new-img-*
   * 
   * @return
   */
  public static List<String> getParamters(HttpServletRequest request, String paramNamePrefix) {
    Map requestParams = request.getParameterMap();
    List<String> params = new ArrayList<String>();
    for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
      String name = (String) iter.next();
      if (name.startsWith(paramNamePrefix)) {
        params.add(name);
      }
    }
    return params;
  }

  /**
   * 得到Http参数
   *
   * @param request HttpServletRequest
   * @param paramName 参数名
   * @param defaultStr 默认值
   * @return
   */
  public static String getString(HttpServletRequest request, String paramName, String defaultStr) {
    String value = request.getParameter(paramName);
    if (value == null) {
      return defaultStr;
    }
    return value.trim();
  }

  /**
   * 得到Http字符串数组参数
   *
   * @param request HttpServletRequest
   * @param paramName 参数名
   * @return
   */
  public static String[] getStringArray(HttpServletRequest request, String paramName) {
    return request.getParameterValues(paramName);
  }

  /**
   * 得到整形参数
   *
   * @param request HttpServletRequest
   * @param paramName 参数名
   * @param defaultInt 默认值
   * @return
   */
  public static Integer getInteger(HttpServletRequest request, String paramName, int defaultInt) {
    String value = request.getParameter(paramName);
    if (value == null) {
      return defaultInt;
    }
    try {
      return new Integer(value);
    } catch (NumberFormatException e) {
      return defaultInt;
    }
  }

  public static Integer[] getIntegerArray(HttpServletRequest request, String paramName) {
    String[] values = getStringArray(request, paramName);
    if (values == null) {
      return null;
    }
    List<Integer> list = new ArrayList<Integer>();
    for (String value : values) {
      try {
        Integer paramValue = new Integer(value);
        list.add(paramValue);
      } catch (NumberFormatException e) {
      }
    }
    return list.toArray(new Integer[] {});
  }

  public static Long getLong(HttpServletRequest request, String paramName, long defaultLong) {
    String value = request.getParameter(paramName);
    if (value == null) {
      return defaultLong;
    }
    try {
      return new Long(value);
    } catch (NumberFormatException e) {
      return defaultLong;
    }
  }

  public static Long[] getLongArray(HttpServletRequest request, String paramName) {
    String[] values = getStringArray(request, paramName);
    if (values == null) {
      return null;
    }
    List<Long> list = new ArrayList<Long>();
    for (String value : values) {
      try {
        Long paramValue = new Long(value);
        list.add(paramValue);
      } catch (NumberFormatException e) {
      }
    }
    return list.toArray(new Long[] {});
  }

  public static Double getDouble(HttpServletRequest request, String paramName,
          double defaultDouble) {
    String value = request.getParameter(paramName);
    if (value == null) {
      return defaultDouble;
    }
    try {
      return new Double(value);
    } catch (NumberFormatException e) {
      return defaultDouble;
    }
  }

  public static Double[] getDoubleArray(HttpServletRequest request, String paramName) {
    String[] values = getStringArray(request, paramName);
    if (values == null) {
      return null;
    }
    List<Double> list = new ArrayList<Double>();
    for (String value : values) {
      try {
        Double paramValue = new Double(value);
        list.add(paramValue);
      } catch (NumberFormatException e) {
      }
    }
    return list.toArray(new Double[] {});
  }

  /**
   * 把HttpServletRequest中所有的参数重新组织,形成新的查询字符串.用于转向页面时,保存request中的参数值不丢失
   *
   * @param request
   * @param encoding URL编码格式
   * @return 新的参数排除.格式是: aaa=value&bbb=value&
   */
  @SuppressWarnings("rawtypes")
  public static String getFullRequestUrl(HttpServletRequest request, String encoding) {
    StringBuffer sb = new StringBuffer();
    Map requestParams = request.getParameterMap();
    for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
      String name = (String) iter.next();
      String[] values = (String[]) requestParams.get(name);
      for (String value : values) {
        try {
          sb.append(name).append("=").append(java.net.URLEncoder.encode(value, encoding))
                  .append("&");
        } catch (UnsupportedEncodingException e) {
        }
      }
    }
    return sb.toString();
  }

  public static String getFullRequestUrl(String url, Map params, String ext, String encoding) {
    return getFullRequestUrl(url, params, ext, encoding, true, false);
  }

  /**
   * 将参数拼接到URL后面
   * 
   * @param url
   * @param params
   * @param ext 如#tip3
   * @param encoding
   * @param needEncode 是否需要编码
   * @param dropEmpty 去掉空的参数,如name=
   * @return
   */
  @SuppressWarnings("rawtypes")
  public static String getFullRequestUrl(String url, Map params, String ext, String encoding,
          boolean needEncode, boolean dropEmpty) {
    StringBuffer sb = new StringBuffer();
    for (Iterator iter = params.keySet().iterator(); iter.hasNext();) {
      String name = (String) iter.next();
      Object value = params.get(name);

      try {
        if (value == null) {
          if (dropEmpty) {
            continue;
          }
          sb.append(name).append("=&");
        } else {
          String str = value.toString();
          if (StringUtils.isBlank(str) && dropEmpty) {
            continue;
          }
          if (needEncode) {
            str = java.net.URLEncoder.encode(str, encoding);
          }
          sb.append(name).append("=").append(str).append("&");
        }
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
      }
    }
    String requesturl = url + "?" + sb.toString();
    if (requesturl.lastIndexOf("&") != -1) {
      requesturl = requesturl.substring(0, requesturl.length() - 1);
    }

    if (StringUtils.isNotBlank(ext)) {
      requesturl = requesturl + ext;
    }
    return requesturl;
  }

  /**
   * 将参数拼接到URL后面,除了参数外,不带多余的#信息,默认使用utf8进行encode
   * 
   * @param url
   * @param params
   * @param ext
   * @param encoding
   * @return
   */
  @SuppressWarnings("rawtypes")
  public static String getFullRequestUrl(String url, Map params) {
    return getFullRequestUrl(url, params, "", "utf-8");
  }

  /**
   * 把HttpServletRequest中所有的参数重新组织,形成新的查询字符串.用于转向页面时,保存request中的参数值不丢失,默认utf-8 编码
   *
   * @param request
   * @return 新的参数排除.格式是: aaa=value&bbb=value&
   */
  public static String getFullRequestUrl(HttpServletRequest request) {
    return getFullRequestUrl(request, "utf-8");
  }

  /**
   * 得到当前的URL及所有参数,用于转向页面时,保存request中的参数值不丢失,默认utf-8编码
   *
   * @param request
   * @return 请求地址中,完整的URL和参数
   */
  public static String getRequestUrl(HttpServletRequest request) {
    String requesturl = request.getRequestURL().toString();
    String params = getFullRequestUrl(request);
    if (params.length() > 0) {
      requesturl = requesturl + "?" + params;
    }
    return requesturl;
  }

  /////////////////////////////////////////////////////////
  /**
   * @param request
   * @return
   */
  public static Map<String, String> parseFromHeader(HttpServletRequest request) {
    Map<String, String> params = new HashMap<String, String>();
    @SuppressWarnings("unchecked")
    Enumeration<String> e = request.getHeaderNames();
    while (e.hasMoreElements()) {
      String key = e.nextElement();
      params.put(key.toLowerCase(), request.getHeader(key));
    }
    return params;
  }

  /**
   * 请求参数组转换成Map
   */
  public static Map<String, String> parameterToMap(HttpServletRequest request) {
    Map<String, String> params = new HashMap<String, String>();
    @SuppressWarnings("unchecked")
    Enumeration<String> e = request.getParameterNames();
    while (e.hasMoreElements()) {
      String key = e.nextElement();
      params.put(key, request.getParameter(key));
    }
    return params;
  }

  /**
   * 请求参数组换成字符串, 格式为: key=value. 方便打印日志
   */
  public static String parameterToString(HttpServletRequest request) {
    StringBuffer sb = new StringBuffer();
    @SuppressWarnings("unchecked")
    Enumeration<String> e = request.getParameterNames();
    while (e.hasMoreElements()) {
      String key = e.nextElement();
      sb.append(key).append("=").append(request.getParameter(key)).append(" ");
    }
    return sb.toString();
  }

  /**
   * POST请求的BODY转化为String
   * 
   * @param request
   * @return
   * @throws IOException
   */
  public static String contentToString(HttpServletRequest request) throws IOException {
    try {
      java.io.BufferedReader reader =
              new java.io.BufferedReader(new java.io.InputStreamReader(request.getInputStream()));
      StringBuffer sb = new StringBuffer();
      String tmp = null;
      while ((tmp = reader.readLine()) != null) {
        sb.append(tmp).append("\r\n");
      }
      return sb.toString();
    } catch (IOException e) {
      throw e;
    }
  }

  /**
   * 请求参数表转转换. 转换规则为,参数名前加上"c_"以和数据库字段名一致. 重要规则: 数据库建表时, 接口字段统一为字符串型, 字段名为 c_参数名
   */
  public static void parserParameter(HttpServletRequest request, Map<String, Object> params,
          String[] parameterList) {
    for (String k : parameterList) {
      String v = ParamUtils.getString(request, k, "");
      params.put("c_".concat(k), v);
    }
  }

  /**
   * 请求参数表转转换. 传入二维数组,数组为: 参数名, 列名
   */
  public static void parserParameter(HttpServletRequest request, Map<String, Object> params,
          String[][] parameterList) {
    for (String[] k : parameterList) {
      String v = ParamUtils.getString(request, k[0], "");
      params.put(k[1], v);
    }
  }

  /**
   * 信息费转换
   * 
   * @param price 信息费 单位:分
   */
  public static BigDecimal getPrice(String price/* 信息费:单位:分 */) {
    BigDecimal amount = null;
    try {
      float fee = Float.parseFloat(price);
      amount = new BigDecimal(fee / 100);
    } catch (NumberFormatException e) {
      amount = null;
    }
    return amount;
  }

  /**
   * 转码转换
   * 
   * @param inputStr
   * @param srcEncoding
   * @param dstEncoding
   * @return
   */
  public static String encoding(String inputStr, String srcEncoding, String dstEncoding) {
    try {
      return new String(inputStr.getBytes(srcEncoding), dstEncoding);
    } catch (UnsupportedEncodingException e) {
    }
    return inputStr;
  }

  /**
   * 将参数从request封装到指定bean
   * 
   * @author: hejianhui@wegooooo.com
   * @param request
   * @param clazz
   * @return
   * @return: Object
   * @time: 2016年7月11日 下午4:05:43
   */
  @SuppressWarnings("rawtypes")
  public Object request2bean(HttpServletRequest request, Class clazz) {
    try {
      Field[] file = clazz.getDeclaredFields();
      Object obj = clazz.newInstance();
      for (int i = 0; i < file.length; i++) {
        String value = request.getParameter(file[i].getName());

        BeanUtils.setProperty(obj, file[i].getName(), value);
      }

      return obj;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }



}

 

 .

import com.google.gson.Gson;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.net.ssl.SSLContext;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
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.CharsetUtils;
import org.apache.http.util.EntityUtils;
import org.springframework.util.CollectionUtils;

/**
 * http请求工具
 */
@Slf4j
public class HttpRequestClient {

    public static class MyX509TrustManager implements TrustStrategy {
        @Override
        public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            return true;
        }
    }

    public static CloseableHttpClient createHttpClient(boolean enableSSL) throws Exception {
        try {
            if (enableSSL) {
                SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new MyX509TrustManager())
                        .build();
                SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
                return HttpClients.custom().setSSLSocketFactory(sslsf).build();
            } else {
                return HttpClients.createDefault();
            }
        } catch (Exception e) {
            throw e;
        }
    }

    public static String doPostText(String url, String text, boolean enableSSL) throws Exception {
        CloseableHttpClient httpclient = createHttpClient(enableSSL);

        HttpPost httpPost = new HttpPost(url);
        CloseableHttpResponse response = null;
        try {
            httpPost.setEntity(new StringEntity(text, "utf-8"));

            response = httpclient.execute(httpPost);
            org.apache.http.HttpEntity entity = response.getEntity();

            if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) {
                if (entity != null) {
                    String result = EntityUtils.toString(entity, "utf-8");
                    EntityUtils.consume(entity);
                    return result;
                } else {
                    return null;
                }
            }

            EntityUtils.consume(entity);
            return null;
        } catch (ClientProtocolException e) {
            throw new Exception(e);
        } catch (IOException e) {
            throw new Exception(e);
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
            } catch (IOException e) {
                throw new Exception(e);
            }
        }
    }


    public static byte[] getBytes(String urlPath) throws Exception {
        InputStream inStream = getInputStream(urlPath);
        if (inStream != null) {
            return readStream(inStream);
        }
        return null;
    }

    private static byte[] readStream(InputStream inStream) throws Exception {
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, len);
        }
        outStream.close();
        inStream.close();
        return outStream.toByteArray();
    }

    public static InputStream getInputStream(String urlPath) throws IOException {
        URL url = new URL(urlPath);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5 * 1000);
        conn.setRequestMethod("GET");
        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            return conn.getInputStream();
        }
        return null;
    }

    public static void saveToFile(String urlPath, File saveFile)
            throws Exception {
        URL url = new URL(urlPath);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5 * 1000);
        conn.setRequestMethod("GET");
        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream is = conn.getInputStream();

            FileOutputStream fos = new FileOutputStream(saveFile);
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
            }
            is.close();
            fos.close();
        }
    }

    public static String doGetByParams(String url, Map<String, Object> params)
            throws Exception {
        return doGet(WebConstant.by_params, url, params);
    }

    public static String doGetByHeader(String url, Map<String, Object> params)
            throws Exception {
        return doGet(WebConstant.by_header, url, params);
    }

    public static String doGet(int paramsPassMethod, String url,
                               Map<String, Object> params) throws Exception {
        return doGet(paramsPassMethod, url, params, false, null);
    }


    public static String doGet(int paramsPassMethod, String url,
                               Map<String, Object> params, boolean enableSSL, HttpClient client) throws Exception {
        return doGet(paramsPassMethod, url, params, enableSSL, client, "utf-8");
    }

    public static String doGet(int paramsPassMethod, String url,
                               Map<String, Object> params, boolean enableSSL, HttpClient client, String charset) throws Exception {
        log.info("doGet():url={};params={};", url, params);
        if (WebConstant.by_params != paramsPassMethod
                && WebConstant.by_header != paramsPassMethod) {
            throw new Exception("不支持的参数传递方式");
        }

        if (StringUtils.isEmpty(url)) {
            throw new Exception("URL为空");
        }

        if (WebConstant.by_params == paramsPassMethod) {

            if (params != null && !params.isEmpty()) {
                url = ParamUtils.getFullRequestUrl(url, params);
            }
        }

        CloseableHttpClient httpclient = null;
        if (client == null) {
            httpclient = createHttpClient(enableSSL);
        } else {
            httpclient = (CloseableHttpClient) client;
        }

        HttpGet httpGet = new HttpGet(url);

        if (WebConstant.by_header == paramsPassMethod) {
            if (params != null && !params.isEmpty()) {
                for (Iterator<String> it = params.keySet().iterator(); it
                        .hasNext(); ) {
                    String key = it.next();
                    String value = String.valueOf(params.get(key));
                    httpGet.setHeader(key, value);
                }
            }
        }

        CloseableHttpResponse response = null;
        try {
            response = httpclient.execute(httpGet);
            HttpEntity entity = response.getEntity();

            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                if (entity != null) {
                    String result = EntityUtils.toString(entity, CharsetUtils.get(charset));  //20141205增加UTF-8
                    EntityUtils.consume(entity);
                    return result;
                } else {
                    return null;
                }
            }
        } catch (Exception e) {
            log.error("http请求接口异常:", e);
            throw new Exception(e);
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
            } catch (IOException e) {
                throw new Exception(e);
            }
        }
        return null;
    }

    // ////////////////////////////////////////////////////////////////////////////////////////

    public static String doPostByParams(String url, Map<String, Object> params)
            throws Exception {
        return doPost(WebConstant.by_params, url, params);
    }

    public static String doPostByHeader(String url, Map<String, Object> params)
            throws Exception {
        return doPost(WebConstant.by_header, url, params);
    }

    public static String doPost(int paramsPassMethod, String url,
                                Map<String, Object> params) throws Exception {
        return doPost(paramsPassMethod, url, params, false, null);
    }

    public static String doPost(int paramsPassMethod, String url,
                                Map<String, Object> params, boolean enableSSL, HttpClient client) throws Exception {
        log.info("doPost():url={},params={}", url, params);

        if (WebConstant.by_params != paramsPassMethod
                && WebConstant.by_header != paramsPassMethod) {
            throw new Exception("不支持的参数传递方式");
        }

        if (StringUtils.isEmpty(url)) {
            throw new Exception("URL为空");
        }

        CloseableHttpClient httpclient = null;
        if (client == null) {
            httpclient = createHttpClient(enableSSL);
        } else {
            httpclient = (CloseableHttpClient) client;
        }

        HttpPost httpPost = new HttpPost(url);
        CloseableHttpResponse response = null;
        try {
            if (WebConstant.by_params == paramsPassMethod) {

                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                for (Iterator<String> it = params.keySet().iterator(); it
                        .hasNext(); ) {
                    String key = it.next();
                    Object obj = params.get(key);
                    if (obj != null) {
                        String value = String.valueOf(obj);
                        nameValuePairs.add(new BasicNameValuePair(key, value));
                    } else {
                        nameValuePairs.add(new BasicNameValuePair(key, null));
                    }
                }
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            }

            if (WebConstant.by_header == paramsPassMethod) {
                if (params != null && !params.isEmpty()) {
                    for (Iterator<String> it = params.keySet().iterator(); it
                            .hasNext(); ) {
                        String key = it.next();
                        String value = String.valueOf(params.get(key));
                        httpPost.setHeader(key, value);
                    }
                }
            }

            response = httpclient.execute(httpPost);
            HttpEntity entity = response.getEntity();

            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                if (entity != null) {
                    String result = EntityUtils.toString(entity, CharsetUtils.get("utf-8"));  //20141205增加UTF-8
                    EntityUtils.consume(entity);
                    return result;
                } else {
                    return null;
                }
            }

            EntityUtils.consume(entity);
            return null;
        } catch (ClientProtocolException e) {
            throw e;
        } catch (IOException e) {
            throw e;
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
            } catch (IOException e) {
                throw e;
            }
        }
    }

    public static String doPost(String url, Map<String, Object> headers,
                                Map<String, Object> params, boolean enableSSL, HttpClient client) throws Exception {
        log.info("doPost():url={},headers={},params={}", url, headers, params);
        if (StringUtils.isEmpty(url)) {
            throw new IllegalArgumentException("URL为空");
        }

        CloseableHttpClient httpclient = null;
        if (client == null) {
            httpclient = createHttpClient(enableSSL);
        } else {
            httpclient = (CloseableHttpClient) client;
        }

        HttpPost httpPost = new HttpPost(url);
        CloseableHttpResponse response = null;
        try {
            if (!CollectionUtils.isEmpty(headers)) {
                if (headers != null && !headers.isEmpty()) {
                    for (Iterator<String> it = headers.keySet().iterator(); it
                            .hasNext(); ) {
                        String key = it.next();
                        String value = String.valueOf(headers.get(key));
                        httpPost.setHeader(key, value);
                    }
                }
            }
            if (!CollectionUtils.isEmpty(params)) {
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                for (Iterator<String> it = params.keySet().iterator(); it
                        .hasNext(); ) {
                    String key = it.next();
                    Object obj = params.get(key);
                    if (obj != null) {
                        String value = String.valueOf(obj);
                        nameValuePairs.add(new BasicNameValuePair(key, value));
                    } else {
                        nameValuePairs.add(new BasicNameValuePair(key, null));
                    }
                }
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            }
            response = httpclient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                String result = EntityUtils.toString(entity, CharsetUtils.get("utf-8"));  //20141205增加UTF-8
                EntityUtils.consume(entity);
                return result;
            } else {
                EntityUtils.consume(entity);
                return null;
            }
        } catch (ClientProtocolException e) {
            throw e;
        } catch (IOException e) {
            throw e;
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
            } catch (IOException e) {
                throw e;
            }
        }
    }

    /**
     * 使用post方式提交json数据<br>
     * 并将返回的信息也进行json格式化
     */
    public static Map<String, Object> postJson(String url, Map<String, Object> params) throws Exception {
        Gson gson = new Gson();
        String json = gson.toJson(params);
        String resp = doPostText(url, json, true);
        log.info("resp:{}", resp);
        if (StringUtils.isNotBlank(resp)) {
            Map<String, Object> dataMap = gson.fromJson(resp, Map.class);
            if (dataMap == null) {
                return new HashMap<String, Object>();
            }
            return dataMap;
        }
        return new HashMap<String, Object>();
    }
}

 测试

import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

public class CreateUserTest {

    @Test
    public void createUserTest() throws Exception {
        Map<String, Object> paramMap = new HashMap<String, Object>();
        String userId="5af2aebb478d200e400ec4d4";
        paramMap.put("username", userId);
        paramMap.put("password", "123456");
        Map<String, Object> headerMap = new HashMap<String, Object>();
        headerMap.put("Content-Type", "application/x-www-form-urlencoded");
        headerMap.put("Authorization", String.format("Basic %s", "dG9vX3VzZXJfcHJvZDo5OTk5OTk="));
        String result = HttpRequestClient.doPost( "https://xx.dd.cn/oauth/user", headerMap, paramMap, true, null);
        if (StringUtils.isBlank(result) || (result.indexOf("ok") == -1&& result.indexOf("duplicated") == -1)  ) {
            throw new IllegalStateException("创建Oauth2用户失败。userid: " + userId);
        }
    }
}

 

分享到:
评论

相关推荐

    th2c:Tornado HTTP2客户端

    例子在协程中的用法可能是: from th2c import AsyncHTTP2Clientfrom tornado . httpclient import HTTPRequestclient = AsyncHTTP2Client ( host = 'nghttp2.org' , port = 443 , secure = True ,)request = ...

    Retrofit2.0 实现图文(参数+图片)上传方法总结

    在上面的示例中,我们创建了一个 `HttpRequestClient` 类,用于初始化 Retrofit 客户端。我们使用 `OkHttpClient` 创建了一个客户端,并添加了一个 log 拦截器用于日志显示。 三、上传文件 在使用 Retrofit2.0 ...

    Android getJSONObject与optJSONObject的区别结合源码分析

    JSONObject jsonObject = new JSONObject(HttpRequestClient.executeRequest(Constant.Url.GET_FOLLOW_GOODS_URL, param, true)); ResponseInfo responseInfo = new ResponseInfo(); try { if (jsonObject....

    ImageLoaderTask:使用内存缓存和OkHttp3加载图像的模块

    ImageLoaderTask 使用内存缓存和OkHttp3加载图像的模块还支持Get Request要求HttpRequestClient库可以包含在任何Android应用程序中。 HttpRequestClient库支持Android 4.4(Kitkat)及更高版本。在应用程序中使用...

    【java毕业设计】智慧社区教育服务门户.zip

    有java环境就可以运行起来 ,zip里包含源码+论文+PPT, 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上

    基于selenium的携程机票爬虫资料齐全+详细文档+高分项目+源码.zip

    【资源说明】 基于selenium的携程机票爬虫资料齐全+详细文档+高分项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    【java毕业设计】智慧社区宠物管理系统(源代码+论文+PPT模板).zip

    zip里包含源码+论文+PPT,有java环境就可以运行起来 ,功能说明: 文档开篇阐述了随着计算机技术、通信技术和网络技术的快速发展,智慧社区门户网站的建设成为了可能,并被视为21世纪信息产业的主要发展方向之一 强调了网络信息管理技术、数字化处理技术和数字式信息资源建设在国际竞争中的重要性。 指出了智慧社区门户网站系统的编程语言为Java,数据库为MYSQL,并实现了新闻资讯、社区共享、在线影院等功能。 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。

    免费下载:Civil War (Stuart Moore)_xVBgd.zip

    免费下载:Civil War (Stuart Moore)_xVBgd.zip

    JSP基于WEB的图书馆借阅系统的设计与实现(源代码+论文)(2024pw).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    免费下载:Spider-Man (Stefan Petrucha)_2pBuA.zip

    免费下载:Spider-Man (Stefan Petrucha)_2pBuA.zip

    jj视频合并程序代码QZQ.txt

    jj视频合并程序代码QZQ

    【java毕业设计】智慧社区会员等级提升系统(源代码+论文+PPT模板).zip

    zip里包含源码+论文+PPT,有java环境就可以运行起来 ,功能说明: 文档开篇阐述了随着计算机技术、通信技术和网络技术的快速发展,智慧社区门户网站的建设成为了可能,并被视为21世纪信息产业的主要发展方向之一 强调了网络信息管理技术、数字化处理技术和数字式信息资源建设在国际竞争中的重要性。 指出了智慧社区门户网站系统的编程语言为Java,数据库为MYSQL,并实现了新闻资讯、社区共享、在线影院等功能。 系统设计与功能: 文档详细描述了系统的后台管理功能,包括系统管理模块、新闻资讯管理模块、公告管理模块、社区影院管理模块、会员上传下载管理模块以及留言管理模块。 系统管理模块:允许管理员重新设置密码,记录登录日志,确保系统安全。 新闻资讯管理模块:实现新闻资讯的添加、删除、修改,确保主页新闻部分始终显示最新的文章。 公告管理模块:类似于新闻资讯管理,但专注于主页公告的后台管理。 社区影院管理模块:管理所有视频的添加、删除、修改,包括影片名、导演、主演、片长等信息。 会员上传下载管理模块:审核与删除会员上传的文件。 留言管理模块:回复与删除所有留言,确保系统内的留言得到及时处理。

    jsp医院病区管理系统(论文+中期检查表+任务书+综合材料)(20242g).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    基于卷积神经网络的通信调制方式识别详细文档+全部资料+优秀项目+源码.zip

    【资源说明】 基于卷积神经网络的通信调制方式识别详细文档+全部资料+优秀项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    计算机网络学习之旅.pptx

    理层、数据链路层、网络层、传输层和应用层的功能、技术和协议。同时,对网络安全、无线网络、网络管理和网络新技术进行了深入剖析。通过案例分析帮助学习者更好地理解实际应用,推荐学习资源助力深入学习。最后总结要点并展望未来网络发展趋势,为计算机网络学习者提供了丰富的知识和实用的指导。

    51单片机控制的智能小车.7z

    51单片机控制的智能小车.7z

    计算结构体变量的内存大小1.cpp

    计算结构体变量的内存大小1.cpp

    基于多智能体深度强化学习的车联网通信资源分配优化详细文档+全部资料+源码.zip

    【资源说明】 基于多智能体深度强化学习的车联网通信资源分配优化详细文档+全部资料+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    空中俯视物体检测11-YOLO(v5至v9)、COCO、CreateML、Paligemma数据集合集.rar

    空中俯视物体检测11-YOLO(v5至v9)、COCO、CreateML、Paligemma数据集合集.rarDOTA V2开发训练-V1 2023-12-28 10:02 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括8388张图像。 以可可格式注释了飞机船舶存储 - 基准桶。 将以下预处理应用于每个图像: 没有应用图像增强技术。

    jsp网上购书系统设计(源代码+论文)(202490).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

Global site tag (gtag.js) - Google Analytics