java实现HTTP请求的三种方式

2019-05-17  本文已影响0人  4553675200ad

目前JAVA实现HTTP请求的方法用的最多的有两种:一种是通过HTTPClient这种第三方的开源框架去实现。HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,HttpClient3.1 是 org.apache.commons.httpclient下操作远程 url的工具包,虽然已不再更新,但实现工作中使用httpClient3.1的代码还是很多,HttpClient4.5是org.apache.http.client下操作远程 url的工具包,最新的;另一种则是通过HttpURLConnection去实现,HttpURLConnection是JAVA的标准类,是JAVA比较原生的一种实现方式。

自己在工作中三种方式都用到过,总结一下分享给大家,也方便自己以后使用,话不多说上代码。

第一种方式:java原生HttpURLConnection

package com.powerX.httpClient;
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.OutputStream;
  import java.net.HttpURLConnection;
  import java.net.MalformedURLException;
  import java.net.URL;
  public class HttpClient {
      public static String doGet(String httpurl) {
          HttpURLConnection connection = null;
          InputStream is = null;
          BufferedReader br = null;
          String result = null;
        // 返回结果字符串
          try {
              // 创建远程url连接对象
              URL url = new URL(httpurl);
              // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
              connection = (HttpURLConnection) url.openConnection();
              // 设置连接方式:get
              connection.setRequestMethod("GET");
              // 设置连接主机服务器的超时时间:15000毫秒
              connection.setConnectTimeout(15000);
              // 设置读取远程返回的数据时间:60000毫秒
              connection.setReadTimeout(60000);
              // 发送请求
              connection.connect();
              // 通过connection连接,获取输入流
              if (connection.getResponseCode() == 200) {
                  is = connection.getInputStream();
                  // 封装输入流is,并指定字符集
                  br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                  // 存放数据
                  StringBuffer sbf = new StringBuffer();
                  String temp = null;
                  while ((temp = br.readLine()) != null) {
                      sbf.append(temp);
                      sbf.append("rn");
  }
  result = sbf.toString();
  }
  } catch (MalformedURLException e) {
  e.printStackTrace();
  } catch (IOException e) {
  e.printStackTrace();
  } finally {
  // 关闭资源
  if (null != br) {
  try {
  br.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  if (null != is) {
  try {
  is.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  connection.disconnect();// 关闭远程连接
  }
  return result;
  }
  public static String doPost(String httpUrl, String param) {
  HttpURLConnection connection = null;
  InputStream is = null;
  OutputStream os = null;
  BufferedReader br = null;
  String result = null;
  try {
  URL url = new URL(httpUrl);
  // 通过远程url连接对象打开连接
  connection = (HttpURLConnection) url.openConnection();
  // 设置连接请求方式
  connection.setRequestMethod("POST");
  // 设置连接主机服务器超时时间:15000毫秒
  connection.setConnectTimeout(15000);
  // 设置读取主机服务器返回数据超时时间:60000毫秒
  connection.setReadTimeout(60000);
  // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
  connection.setDoOutput(true);
  // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
  connection.setDoInput(true);
  // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
  connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  // 设置鉴权信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0
  connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
  // 通过连接对象获取一个输出流
  os = connection.getOutputStream();
  // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
  os.write(param.getBytes());
  // 通过连接对象获取一个输入流,向远程读取
  if (connection.getResponseCode() == 200) {
  is = connection.getInputStream();
  // 对输入流对象进行包装:charset根据工作项目组的要求来设置
  br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
  StringBuffer sbf = new StringBuffer();
  String temp = null;
  // 循环遍历一行一行读取数据
  while ((temp = br.readLine()) != null) {
  sbf.append(temp);
  sbf.append("rn");
  }
  result = sbf.toString();
  }
  } catch (MalformedURLException e) {
  e.printStackTrace();
  } catch (IOException e) {
  e.printStackTrace();
  } finally {
  // 关闭资源
  if (null != br) {
  try {
  br.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  if (null != os) {
  try {
  os.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  if (null != is) {
  try {
  is.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  // 断开与远程地址url的连接
  connection.disconnect();
  }
  return result;
  }
  }

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151

第二种方式:apache HttpClient3.1

 package com.powerX.httpClient;
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.UnsupportedEncodingException;
  import java.util.Iterator;
  import java.util.Map;
  import java.util.Map.Entry;
  import java.util.Set;
  import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
  import org.apache.commons.httpclient.HttpClient;
  import org.apache.commons.httpclient.HttpStatus;
  import org.apache.commons.httpclient.NameValuePair;
  import org.apache.commons.httpclient.methods.GetMethod;
  import org.apache.commons.httpclient.methods.PostMethod;
  import org.apache.commons.httpclient.params.HttpMethodParams;
  public class HttpClient3 {
      public static String doGet(String url) {
          // 输入流
          InputStream is = null;
          BufferedReader br = null;
          String result = null;
          // 创建httpClient实例
          HttpClient httpClient = new HttpClient();
          // 设置http连接主机服务超时时间:15000毫秒
          // 先获取连接管理器对象,再获取参数对象,再进行参数的赋值
          httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
          // 创建一个Get方法实例对象
          GetMethod getMethod = new GetMethod(url);
          // 设置get请求超时为60000毫秒
          getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
          // 设置请求重试机制,默认重试次数:3次,参数设置为true,重试机制可用,false相反
          getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, true));
          try {
              // 执行Get方法
              int statusCode = httpClient.executeMethod(getMethod);
              // 判断返回码
              if (statusCode != HttpStatus.SC_OK) {
                  // 如果状态码返回的不是ok,说明失败了,打印错误信息
                  System.err.println("Method faild: " + getMethod.getStatusLine());
                  
            } else {
                  // 通过getMethod实例,获取远程的一个输入流
                  is = getMethod.getResponseBodyAsStream();
                  // 包装输入流
                  br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                  StringBuffer sbf = new StringBuffer();
                  // 读取封装的输入流
                  String temp = null;
                  while ((temp = br.readLine()) != null) {
                      sbf.append(temp).append("rn");
  }
  result = sbf.toString();
  }
  } catch (IOException e) {
  e.printStackTrace();
  } finally {
  // 关闭资源
  if (null != br) {
  try {
  br.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  if (null != is) {
  try {
  is.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  // 释放连接
  getMethod.releaseConnection();
  }
  return result;
  }
  public static String doPost(String url, MapparamMap) {
  // 获取输入流
  InputStream is = null;
  BufferedReader br = null;
  String result = null;
  // 创建httpClient实例对象
  HttpClient httpClient = new HttpClient();
  // 设置httpClient连接主机服务器超时时间:15000毫秒
  httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
  // 创建post请求方法实例对象
  PostMethod postMethod = new PostMethod(url);
  // 设置post请求超时时间
  postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
  NameValuePair[] nvp = null;
  // 判断参数map集合paramMap是否为空
  if (null != paramMap && paramMap.size() > 0) {// 不为空
  // 创建键值参数对象数组,大小为参数的个数
  nvp = new NameValuePair[paramMap.size()];
  // 循环遍历参数集合map
  Set<entry> entrySet = paramMap.entrySet();
  // 获取迭代器
  Iterator<entry> iterator = entrySet.iterator();
  int index = 0;
  while (iterator.hasNext()) {
  EntrymapEntry = iterator.next();
  // 从mapEntry中获取key和value创建键值对象存放到数组中
  try {
  nvp[index] = new NameValuePair(mapEntry.getKey(),
  new String(mapEntry.getValue().toString().getBytes("UTF-8"), "UTF-8"));
  } catch (UnsupportedEncodingException e) {
  e.printStackTrace();
  }
  index++;
  }
  }
  // 判断nvp数组是否为空
  if (null != nvp && nvp.length > 0) {
  // 将参数存放到requestBody对象中
  postMethod.setRequestBody(nvp);
  }
  // 执行POST方法
  try {
  int statusCode = httpClient.executeMethod(postMethod);
  // 判断是否成功
  if (statusCode != HttpStatus.SC_OK) {
  System.err.println("Method faild: " + postMethod.getStatusLine());
  }
  // 获取远程返回的数据
  is = postMethod.getResponseBodyAsStream();
  // 封装输入流
  br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
  StringBuffer sbf = new StringBuffer();
  String temp = null;
  while ((temp = br.readLine()) != null) {
  sbf.append(temp).append("rn");
  }
  result = sbf.toString();
  } catch (IOException e) {
  e.printStackTrace();
  } finally {
  // 关闭资源
  if (null != br) {
  try {
  br.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  if (null != is) {
  try {
  is.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  // 释放连接
  postMethod.releaseConnection();
  }
  return result;
  }
  }

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170

第三种方式:apache httpClient4.5

package com.powerX.httpClient;
  import java.io.IOException;
  import java.io.UnsupportedEncodingException;
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  import java.util.Map.Entry;
  import java.util.Set;
  import org.apache.http.HttpEntity;
  import org.apache.http.NameValuePair;
  import org.apache.http.client.ClientProtocolException;
  import org.apache.http.client.config.RequestConfig;
  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.impl.client.CloseableHttpClient;
  import org.apache.http.impl.client.HttpClients;
  import org.apache.http.message.BasicNameValuePair;
  import org.apache.http.util.EntityUtils;
  public class HttpClient4 {
      public static String doGet(String url) {
          CloseableHttpClient httpClient = null;
          CloseableHttpResponse response = null;
          String result = "";
          try {
              // 通过址默认配置创建一个httpClient实例
              httpClient = HttpClients.createDefault();
              // 创建httpGet远程连接实例
              HttpGet httpGet = new HttpGet(url);
              // 设置请求头信息,鉴权
              httpGet.setHeader("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
              // 设置配置请求参数
              RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 连接主机服务超时时间
              .setConnectionRequestTimeout(35000)// 请求超时时间
              .setSocketTimeout(60000)// 数据读取超时时间
              .build();
              // 为httpGet实例设置配置
              httpGet.setConfig(requestConfig);
              // 执行get请求得到返回对象
              response = httpClient.execute(httpGet);
              // 通过返回对象获取返回数据
              HttpEntity entity = response.getEntity();
              // 通过EntityUtils中的toString方法将结果转换为字符串
              result = EntityUtils.toString(entity);
              
        }
        catch (ClientProtocolException e) {
              e.printStackTrace();
              
        }
        catch (IOException e) {
              e.printStackTrace();
              
        }
        finally {
              // 关闭资源
              if (null != response) {
                  try {
                      response.close();
                      
                }
                catch (IOException e) {
                      e.printStackTrace();
                      
                }
                  
            }
              if (null != httpClient) {
                  try {
                      httpClient.close();
                      
                }
                catch (IOException e) {
                      e.printStackTrace();
                      
                }
                  
            }
              
        }
          return result;
          
    }
      public static String doPost(String url, MapparamMap) {
          CloseableHttpClient httpClient = null;
          CloseableHttpResponse httpResponse = null;
          String result = "";
          // 创建httpClient实例
          httpClient = HttpClients.createDefault();
          // 创建httpPost远程连接实例
          HttpPost httpPost = new HttpPost(url);
          // 配置请求参数实例
          RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
          .setConnectionRequestTimeout(35000)// 设置连接请求超时时间
          .setSocketTimeout(60000)// 设置读取数据连接超时时间
          .build();
          // 为httpPost实例设置配置
          httpPost.setConfig(requestConfig);
          // 设置请求头
          httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
          // 封装post请求参数
          if (null != paramMap && paramMap.size() > 0) {
              Listnvps = new ArrayList();
              // 通过map集成entrySet方法获取entity
              Set<entry> entrySet = paramMap.entrySet();
              // 循环遍历,获取迭代器
              Iterator<entry> iterator = entrySet.iterator();
              while (iterator.hasNext()) {
                  EntrymapEntry = iterator.next();
                  nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString()));
                  
            }
              // 为httpPost设置封装好的请求参数
              try {
                  httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
                  
            }
            catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
                  
            }
              
        }
          try {
              // httpClient对象执行post请求,并返回响应参数对象
              httpResponse = httpClient.execute(httpPost);
              // 从响应对象中获取响应内容
              HttpEntity entity = httpResponse.getEntity();
              result = EntityUtils.toString(entity);
              
        }
        catch (ClientProtocolException e) {
              e.printStackTrace();
              
        }
        catch (IOException e) {
              e.printStackTrace();
              
        }
        finally {
              // 关闭资源
              if (null != httpResponse) {
                  try {
                      httpResponse.close();
                      
                }
                catch (IOException e) {
                      e.printStackTrace();
                      
                }
                  
            }
              if (null != httpClient) {
                  try {
                      httpClient.close();
                      
                }
                catch (IOException e) {
                      e.printStackTrace();
                      
                }
                  
            }
              
        }
          return result;
          
    }
      
}

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140

实例

有时候我们在使用post请求时,可能传入的参数是json或者其他格式,此时我们则需要更改请求头及参数的设置信息,以httpClient4.5为例,更改下面两列配置:httpPost.setEntity(new StringEntity(“你的json串”)); httpPost.addHeader(“Content-Type”, “application/json”)。

import java.io.File;
  import java.io.IOException;
  import java.io.InterruptedIOException;
  import java.net.URISyntaxException;
  import java.net.UnknownHostException;
  import java.util.ArrayList;
  import java.util.List;
  import java.util.Map;
  import java.util.Map.Entry;
  import javax.net.ssl.SSLException;
  import org.apache.commons.lang3.StringUtils;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.apache.http.HttpEntity;
  import org.apache.http.HttpEntityEnclosingRequest;
  import org.apache.http.HttpRequest;
  import org.apache.http.NameValuePair;
  import org.apache.http.client.ClientProtocolException;
  import org.apache.http.client.HttpRequestRetryHandler;
  import org.apache.http.client.config.RequestConfig;
  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.client.protocol.HttpClientContext;
  import org.apache.http.client.utils.URIBuilder;
  import org.apache.http.conn.ConnectTimeoutException;
  import org.apache.http.entity.ContentType;
  import org.apache.http.entity.StringEntity;
  import org.apache.http.entity.mime.MultipartEntityBuilder;
  import org.apache.http.impl.client.CloseableHttpClient;
  import org.apache.http.impl.client.HttpClients;
  import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
  import org.apache.http.message.BasicNameValuePair;
  import org.apache.http.protocol.HttpContext;
  import org.apache.http.util.EntityUtils;
  public class HttpClientUtils {
      static Log log = LogFactory.getLog(HttpClientUtils.class);
      private static CloseableHttpClient httpClient;
      static {
          PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
          cm.setMaxTotal(100);
          cm.setDefaultMaxPerRoute(100);
          httpClient = HttpClients.custom().setRetryHandler(createRequestRetryHandler()).setConnectionManager(cm).build();
          
    }
      private static RequestConfig getRequestConfig() {
          // return
          // RequestConfig.custom().setConnectTimeout(30000).setConnectionRequestTimeout(30000).setSocketTimeout(30000).build();
          return RequestConfig.custom().setConnectTimeout(120000).setConnectionRequestTimeout(120000)
          .setSocketTimeout(120000).build();
          
    }
      private static HttpRequestRetryHandler createRequestRetryHandler() {
          return new HttpRequestRetryHandler() {
              @Override
              public Boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
                  if (executionCount > 3) {
                      return false;
                      
                }
                  if (exception instanceof InterruptedIOException || exception instanceof UnknownHostException
                  || exception instanceof ConnectTimeoutException || exception instanceof SSLException) {
                      return false;
                      
                }
                  final HttpClientContext clientContext = HttpClientContext.adapt(context);
                  final HttpRequest request = clientContext.getRequest();
                  Boolean idempotent = !(request instanceof HttpEntityEnclosingRequest);
                  if (idempotent) {
                      return true;
                      
                }
                  return false;
                  
            }
              
        }
        ;
          
    }
      
    /**
  * 无参get请求
  *
  * @throws ClientProtocolException
  * @throws IOException
  */
      public static String doGet(String url) throws Exception {
          // 创建http GET请求
          HttpGet httpGet = new HttpGet(url);
          httpGet.setConfig(getRequestConfig());
        // 设置请求参数
          CloseableHttpResponse response = null;
          try {
              long begin = System.currentTimeMillis();
              // 执行请求郑州 不  孕 不  育 医  院:http://jbk.39.net/yiyuanzaixian/zztjyy/
              response = httpClient.execute(httpGet);
              long end = System.currentTimeMillis();
              long timeLength = (end - begin) / 1000;
              // 判断返回状态是否为200
              if (response.getStatusLine().getStatusCode() == 200) {
                  log.info("时长: " + timeLength + "s, URL: " + url);
                  return EntityUtils.toString(response.getEntity(), "UTF-8");
                  
            } else {
                  log.info("时长: " + timeLength + "s, 异常URL: " + url);
                  throw new BusinessException("查询数据为空");
                  
            }
              
        }
        catch (Exception ex) {
              throw ex;
              
        }
        finally {
              if (response != null) {
                  response.close();
                  
            }
              
        }
          
    }
      
    /**
  * 有参get请求
  *
  * @param url
  * @return
  * @throws URISyntaxException
  * @throws IOException
  * @throws ClientProtocolException
  */
      public static String doGet(String url, Mapparams) throws Exception {
          URIBuilder uriBuilder = new URIBuilder(url);
          if (params != null) {
              for (String key : params.keySet()) {
                  uriBuilder.setParameter(key, params.get(key));
                  
            }
              
        }
          return doGet(uriBuilder.build().toString());
          
    }
      
    /**
  * 有参post请求
  *
  * @throws ClientProtocolException
  * @throws IOException
  */
      public static String doPost(String url, Mapparams) throws Exception {
          // 创建http POST请求
          HttpPost httpPost = new HttpPost(url);
          httpPost.setConfig(getRequestConfig());
          if (params != null) {
              // 设置2个post参数,一个是scope、一个是q
              Listparameters = new ArrayList(0);
              for (String key : params.keySet()) {
                  parameters.add(new BasicNameValuePair(key, params.get(key)));
                  
            }
              // 构造一个form表单式的实体
              UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters, "UTF-8");
              // 将请求实体设置到httpPost对象中
              httpPost.setEntity(formEntity);
              
        }
          CloseableHttpResponse response = null;
          try {
              // 执行请求
              response = httpClient.execute(httpPost);
              // 判断返回状态是否为200
              if (response.getStatusLine().getStatusCode() == 200) {
                  return EntityUtils.toString(response.getEntity(), "UTF-8");
                  
            }
              
        }
        finally {
              if (response != null) {
                  response.close();
                  
            }
              
        }
          return null;
          
    }
      
    /**
  * 有参post请求
  *
  * @throws ClientProtocolException
  * @throws IOException
  */
      public static String doPost(String url, Mapparams, MapheaderMap)
      throws Exception {
          // 创建http POST请求
          HttpPost httpPost = new HttpPost(url);
          httpPost.setConfig(getRequestConfig());
          if(headerMap != null){
              for (Entryheader: headerMap.entrySet()){
                  httpPost.setHeader(header.getKey(), header.getValue());
                  
            }
              
        }
          if (params != null) {
              // 设置2个post参数,一个是scope、一个是q
              Listparameters = new ArrayList(0);
              for (String key : params.keySet()) {
                  parameters.add(new BasicNameValuePair(key, params.get(key)));
                  
            }
              // 构造一个form表单式的实体
              UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters, "UTF-8");
              // 将请求实体设置到httpPost对象中
              httpPost.setEntity(formEntity);
              
        }
          CloseableHttpResponse response = null;
          try {
              // 执行请求
              response = httpClient.execute(httpPost);
              // 判断返回状态是否为200
              if (response.getStatusLine().getStatusCode() == 200) {
                  return EntityUtils.toString(response.getEntity(), "UTF-8");
                  
            }
              
        }
        finally {
              if (response != null) {
                  response.close();
                  
            }
              
        }
          return null;
          
    }
      
    /**
  * 有参post请求所传参数为文件
  *
  * @throws ClientProtocolException
  * @throws IOException
  */
      public static String doPostMultipartFile(String url, Mapparams, MapheaderMap)
      throws Exception {
          // 创建http POST请求
          HttpPost httpPost = new HttpPost(url);
          httpPost.setConfig(getRequestConfig());
          if(headerMap != null){
              for (Entryheader: headerMap.entrySet()){
                  httpPost.setHeader(header.getKey(), header.getValue());
                  
            }
              
        }
          if (params != null) {
              // 构造一个form表单式的实体
              MultipartEntityBuilder builder = MultipartEntityBuilder.create();
              for (String key : params.keySet()) {
                  builder.addBinaryBody(key, new File(params.get(key)));
                  
            }
              HttpEntity reqEntity = builder.build();
              // 将请求实体设置到httpPost对象中
              httpPost.setEntity(reqEntity);
              
        }
          CloseableHttpResponse response = null;
          try {
              // 执行请求
              response = httpClient.execute(httpPost);
              // 判断返回状态是否为200
              if (response.getStatusLine().getStatusCode() == 200) {
                  return EntityUtils.toString(response.getEntity(), "UTF-8");
                  
            }
              
        }
        finally {
              if (response != null) {
                  response.close();
                  
            }
              
        }
          return null;
          
    }
      
    /**
  * 有参post请求,json交互
  *
  * @throws ClientProtocolException
  * @throws IOException
  */
      public static String doPostJson(String url, String json) throws Exception {
          // 创建http POST请求
          HttpPost httpPost = new HttpPost(url);
          httpPost.setConfig(getRequestConfig());
          if (StringUtils.isNotBlank(json)) {
              // 标识出传递的参数是 application/json
              StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON);
              httpPost.setEntity(stringEntity);
              
        }
          CloseableHttpResponse response = null;
          try {
              // 执行请求
              response = httpClient.execute(httpPost);
              // 判断返回状态是否为200
              if (response.getStatusLine().getStatusCode() == 200) {
                  return EntityUtils.toString(response.getEntity(), "UTF-8");
                  
            }
              
        }
        finally {
              if (response != null) {
                  response.close();
                  
            }
              
        }
          return null;
          
    }
      
    /**
  * 无参post请求
  *
  * @throws ClientProtocolException
  * @throws IOException
  */
      public static String doPost(String url) throws Exception {
          return doPost(url, null);
          
    }
      
}
上一篇 下一篇

猜你喜欢

热点阅读