封装HttpClient进行http请求与https请求
Posted 精神病人思路广,弱智儿童欢乐多
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装HttpClient进行http请求与https请求相关的知识,希望对你有一定的参考价值。
一.https忽略证书
/** * 用于进行Https请求的HttpClient * * @author joey * */ public class SSLClient { public static CloseableHttpClient createSSLClientDefault(){ try { SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { //信任所有 public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { return true; } }).build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); return HttpClients.custom().setSSLSocketFactory(sslsf).build(); } catch (KeyManagementException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } return HttpClients.createDefault(); } }
二.post与get请求
/** * 利用HttpClient的工具类 * * @author Joey * */ public class HttpClientUtil { private static String charSet = "UTF-8"; private static CloseableHttpClient httpClient = null; private static CloseableHttpResponse response = null; /** * https的post请求 * @param url * @param jsonstr * @param charset * @return */ public static String doHttpsPost(String url, String jsonStr) { try { httpClient = SSLClient.createSSLClientDefault(); HttpPost httpPost = new HttpPost(url); httpPost.setHeader("Content-Type", "application/json"); StringEntity se = new StringEntity(jsonStr); se.setContentType("text/json"); se.setContentEncoding(new BasicHeader("Content-Type", "application/json")); httpPost.setEntity(se); response = httpClient.execute(httpPost); if (response != null) { HttpEntity resEntity = response.getEntity(); if (resEntity != null) { return EntityUtils.toString(resEntity, charSet); } } } catch (Exception ex) { ex.printStackTrace(); }finally { if(httpClient != null){ try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } if(response != null){ try { response.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } /** * http的post请求(用于key-value格式的参数) * @param url * @param param * @return */ public static String doHttpPost(String url,Map<String,String> param){ try { //请求发起客户端 httpClient = HttpClients.createDefault(); //参数集合 List<NameValuePair> postParams = new ArrayList<NameValuePair>(); //遍历参数并添加到集合 for(Map.Entry<String, String> entry:param.entrySet()){ postParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } //通过post方式访问 HttpPost post = new HttpPost(url); HttpEntity paramEntity = new UrlEncodedFormEntity(postParams,charSet); post.setEntity(paramEntity); response = httpClient.execute(post); StatusLine status = response.getStatusLine(); int state = status.getStatusCode(); if (state == HttpStatus.SC_OK) { HttpEntity valueEntity = response.getEntity(); String content = EntityUtils.toString(valueEntity); //jsonObject = JSONObject.fromObject(content); return content; } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(httpClient != null){ try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } if(response != null){ try { response.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } /** * http的post请求(用于请求json格式的参数) * @param url * @param params * @return */ public static String doHttpPost(String url, String jsonStr) { try { httpClient = HttpClients.createDefault(); // 创建httpPost HttpPost httpPost = new HttpPost(url); httpPost.setHeader("Accept", "application/json"); StringEntity entity = new StringEntity(jsonStr, charSet); entity.setContentType("text/json"); entity.setContentEncoding(new BasicHeader("Content-Type", "application/json")); httpPost.setEntity(entity); //发送post请求 response = httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { HttpEntity responseEntity = response.getEntity(); String jsonString = EntityUtils.toString(responseEntity); return jsonString; } }catch(Exception e) { e.printStackTrace(); }finally { if(httpClient != null){ try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } if(response != null){ try { response.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } /** * http的Get请求 * @param url * @param param * @return */ public static String doHttpGet(String url,Map<String,String> param) { CloseableHttpClient httpclient = null; CloseableHttpResponse response = null; try { httpclient = HttpClients.createDefault(); if(param != null && !param.isEmpty()) { //参数集合 List<NameValuePair> getParams = new ArrayList<NameValuePair>(); for(Map.Entry<String, String> entry:param.entrySet()){ getParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(getParams), "UTF-8"); } //发送gey请求 HttpGet httpGet = new HttpGet(url); response = httpclient.execute(httpGet); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { return EntityUtils.toString(response.getEntity()); } }catch(Exception e) { e.printStackTrace(); }finally{ if(httpclient != null){ try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } if(response != null){ try { response.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } }
以上是关于封装HttpClient进行http请求与https请求的主要内容,如果未能解决你的问题,请参考以下文章
httpclient 封装 http(get put post delete)请求