httpClient中get、post详细示例

1.需要引用以下依赖

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>

2.httpUtil帮助类

public class HttpUtil {

private static final Log logger = LogFactory.getLog(HttpUtil.class);
public static final int Format_KeyValue = 0;
public static final int Format_Json = 1;
private static RequestConfig requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD_STRICT)
.setExpectContinueEnabled(Boolean.TRUE)
.setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
.setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build();

/**
* 创建HttpClient客户端
* @param isHttps
* @return
*/

public static CloseableHttpClient createClient(boolean isHttps) {
  if (isHttps) {
    try {
    KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
    FileInputStream instream = new FileInputStream(new File("D:/ssl/test.keystore"));
    trustStore.load(instream, "test".toCharArray());
    // Trust own CA and all self-signed certs
    SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()).build();
    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext,NoopHostnameVerifier.INSTANCE);                                   Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilde    

.    <ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.INSTA.    

    register("https", socketFactory).build();

    // 创建ConnectionManager,添加Connection配置信息
    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(
    socketFactoryRegistry);
    CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(connectionManager)
    .setDefaultRequestConfig(requestConfig).build();
    return closeableHttpClient;
  } catch (KeyManagementException e) {
    e.printStackTrace();
    logger.error("创建HTTPS客户端异常");
    throw new RuntimeException(e);
  } catch (NoSuchAlgorithmException e) {
    throw new RuntimeException(e);
  } catch (CertificateException e) {
    logger.error("创建HTTPS客户端异常");
    e.printStackTrace();
    throw new RuntimeException(e);
  } catch (IOException e) {
    e.printStackTrace();
    throw new RuntimeException(e);
  } catch (KeyStoreException e) {
    e.printStackTrace();
    throw new RuntimeException(e);
  }
} else {
  return HttpClientBuilder.create().build();
}

}

/**
* 调用Get接口
* @param url 接口地址
* @return
*/
public static String sendGet(String url) {
return sendGet(url, createClient(true));
}

/**
* 调用Get接口
* @param url 接口地址
* @param httpClient
* @return
*/
public static String sendGet(String url, CloseableHttpClient httpClient) {
  if (url == null || "".equals(url)) {
    logger.error("接口地址为空");
    return null;
  }
  HttpGet request = null;
  try {
    request = new HttpGet(url);
    if (httpClient == null) {
      logger.error("HttpClient实例为空");
      return null;
    }

    request.addHeader("Content-Type","application/json;charset=UTF-8");
    request.setHeader("Accept","application/json");
    CloseableHttpResponse response = httpClient.execute(request);
    if (response.getStatusLine().getStatusCode() == 200) {
      return EntityUtils.toString(response.getEntity());
    }
   } catch (Exception e) {
     logger.error("访问接口失败,接口地址为:" + url);
  } finally {
   if (request != null)
    request.releaseConnection();
    }
  return null;
}

/**
* 调用Post接口
* @param httpClient
* @param url 接口地址
* @param entity
* @return
*/
public static String sendPost(CloseableHttpClient httpClient, String url, StringEntity entity) {
  if (url == null || "".equals(url)) {
    logger.error("接口地址为空");
    return null;
  }
  HttpPost request = null;
  try {
    request = new HttpPost(url);
    if (httpClient == null) {
      logger.error("HttpClient实例为空");
      return null;
    }
       request.setEntity(entity);
       request.addHeader("Content-Type","application/json;charset=UTF-8");
       request.setHeader("Accept","application/json");

    CloseableHttpResponse response = httpClient.execute(request);
    if (response.getStatusLine().getStatusCode() == 200) {
      return EntityUtils.toString(response.getEntity());
    }
  } catch (Exception e) {
    logger.error("访问接口失败,接口地址为:" + url);
  } finally {
    if (request != null)
      request.releaseConnection();
  }
  return null;
}

/**
* 调用Post接口
* @param httpClient
* @param url 接口地址
* @param user
* @return
*/
public static String sendPost(CloseableHttpClient httpClient, String url, User user) {
  StringEntity entity = new StringEntity(JSON.toJSONString(user), "UTF-8");
  return sendPost(httpClient,url,entity);
}

  public static InputStream downloadRemoteFile(CloseableHttpClient httpClient,String apiUrl,User user) {
    InputStream is = null;
    HttpPost request = new HttpPost(apiUrl);
    try {
      if (httpClient == null) {
        return null;
      }
      StringEntity entity = new StringEntity(JSON.toJSONString(user), "UTF-8");
      request.setEntity(entity);
      request.addHeader("Content-Type","application/json;charset=UTF-8");
      request.setHeader("Accept","application/json");
      CloseableHttpResponse httpResponse = httpClient.execute(request);
      int statusCode = httpResponse.getStatusLine().getStatusCode();
      if (statusCode == HttpStatus.SC_OK) {
        HttpEntity result = httpResponse.getEntity();
        if (null != result) {
          // 获取返回内容
          is = result.getContent();
        }
      } else if(statusCode != HttpStatus.SC_OK && statusCode != HttpStatus.SC_CREATED){
         request.abort();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return is;
  }

}       
/**
    *post方法
    *formdata参数
    */
    public static ResultData<String> sendPostFormData(String url, Map<String,String> params) {
        ResultData<String> rt = new ResultData<String>(-1);
        if (StringUtils.isBlank(url)) {
            rt.setMessage("接口地址为空");
            return rt;
        }

        CloseableHttpClient httpClient = null;

        try {
            httpClient = HttpUtil.createClient(isSSL(url));
        } catch (Exception e) {
            rt.setMessage("创建HttpClient实例失败,失败原因:" + e);
            return rt;
        }

        if (null == httpClient) {
            rt.setMessage("HttpClient实例为空");
            return rt;
        }

        HttpPost request = null;
        CloseableHttpResponse response = null;
        try {
            List<NameValuePair> nvp = new ArrayList<NameValuePair>();
            Set<String> keySet = params.keySet();
            for(String key : keySet){
                nvp.add(new BasicNameValuePair(key, params.get(key)));
            }
            request = new HttpPost(url);
            request.setEntity(new UrlEncodedFormEntity(nvp,"UTF-8"));
            request.setHeader("Accept", "application/json");
            request.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
            response = httpClient.execute(request);

            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                rt.setData(EntityUtils.toString(response.getEntity()));
                rt.setMessage("访问接口成功");
                rt.setStatus(0);

            } else {
                rt.setMessage("访问接口失败,失败原因:" + response.toString());
            }

        } catch (Exception e) {
            rt.setMessage(e.toString());

        } finally {
            if (request != null) {
                request.releaseConnection();
            }

            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {}
            }
        }
        return rt;
    }

 

3.service业务层调用

public class testService(){

  //调用sendGet

  public Test testSendGet(long id){

    Test test= new Test();

    String url ="https://TestProject/restful/queryById?Id=" + Id;
    String rString = HttpUtil.sendGet(url);
    if(null != rString && !rString.isEmpty() && !rString.equals("[]")) {
      test = JSONObject.parseObject(rString,Test.class); 
    } 
  }

       //调用sendPost

  public Test testSendPost(PageInfo<Test> page,long id){

    List<Test> list= new ArrayList<Test>);

    CloseableHttpClient client = HttpUtil.createClient(true);

    String url ="https://TestProject/restful/all?Id=" + Id;
    String rString = HttpUtil.sendPost(client,url,page);;
    if(null != rString && !rString.isEmpty() && !rString.equals("[]")) {
      list = JSONObject.parseArray(rString,Test.class); 
    } 
  }

    //调用downloadRemoteFile下载文件

  public void testDownloadRemoteFile(User user,long id){

    List<Test> list= new ArrayList<Test>);

    CloseableHttpClient client = HttpUtil.createClient(true);

    String url ="https://TestProject/restful/downloads?Id=" + Id;
    InputStream inputStream  = HttpUtil.downloadRemoteFile(client,url,user);
    OutputStream outputStream = null;

    // 打开目的输入流,不存在则会创建
    File file = new File(SbConstants.BASELINE_DOWNLOAD_DIR + relativePath);
    // 判断文件夹是否存在
    if (!file.exists()) {
      // 如果文件夹不存在,则创建新的的文件夹
      file.mkdirs();
    }
    long beginTime = System.currentTimeMillis();   

    try {
      outputStream = new FileOutputStream(SbConstants.BASELINE_DOWNLOAD_DIR + baseline.getFilePath());
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
    // 将输入流is写入文件输出流fos中
    byte[] bytes = new byte[1024];
    try {
       int ch = inputStream.read(bytes, 0, 1024);
     while (ch != -1) {
      outputStream.write(bytes);
      ch = inputStream.read(bytes, 0, 1024);
      }
    } catch (IOException e1) {
      e1.printStackTrace();
    } finally {
      // 关闭输入流等(略)
      try {
        outputStream.close();
        inputStream.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }

  }

}

 

posted @ 2020-01-09 17:11  bud  阅读(433)  评论(0编辑  收藏  举报