设为首页 收藏本站
查看: 517|回复: 0

[经验分享] org.apache.httpcomponents:httpclient 工具类

[复制链接]

尚未签到

发表于 2017-12-24 17:14:26 | 显示全部楼层 |阅读模式
import org.apache.http.HttpEntity;  

import org.apache.http.NameValuePair;  

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.methods.HttpRequestBase;  

import org.apache.http.client.utils.URIBuilder;  

import org.apache.http.config.SocketConfig;  

import org.apache.http.entity.StringEntity;  

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.util.EntityUtils;  

  
import java.io.IOException;
  
import java.io.UnsupportedEncodingException;
  
import java.net.URISyntaxException;
  
import java.util.ArrayList;
  
import java.util.Map;
  

  
/**
  
  * Created by lidada on 2017/6/9.
  
  */

  
public>  
     private static PoolingHttpClientConnectionManager cm;
  
     private static String EMPTY_STR = "";
  
     private static String CONTENT_TYPE_UTF_8 = "UTF-8";
  
     private static String CONTENT_TYPE_GBK = "GBK";
  
     private static String CONTENT_TYPE_JSON = "application/json";
  
     private static final int CONNECTION_TIMEOUT_MS = 60000;
  
     private static final int SO_TIMEOUT_MS = 60000;
  

  
     private static void init() {
  
         if (cm == null) {
  
             cm = new PoolingHttpClientConnectionManager();
  
             cm.setMaxTotal(50);// 整个连接池最大连接数
  
             cm.setDefaultMaxPerRoute(5);// 每路由最大连接数,默认值是2
  
             SocketConfig sc = SocketConfig.custom().setSoTimeout(SO_TIMEOUT_MS).build();
  
             cm.setDefaultSocketConfig(sc);
  
         }
  
     }
  

  
     /**
  
      * 通过连接池获取HttpClient
  
      *
  
      * @return
  
      */
  
     private static CloseableHttpClient getHttpClient() {
  
         init();
  
         return HttpClients.custom().setConnectionManager(cm).setConnectionManagerShared(true) .build();
  
     }
  

  
     public static String httpGetRequest(String url) {
  
         HttpGet httpGet = new HttpGet(url);
  
         return getResult(httpGet);
  
     }
  

  
     public static String httpGetRequest(String url, Map<String, Object> params) throws URISyntaxException {
  
         URIBuilder ub = new URIBuilder();
  
         ub.setPath(url);
  

  
         ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
  
         ub.setParameters(pairs);
  

  
         HttpGet httpGet = new HttpGet(ub.build());
  
         return getResult(httpGet);
  
     }
  

  
     public static String httpGetRequest(String url, Map<String, Object> headers, Map<String, Object> params)
  
             throws URISyntaxException {
  
         URIBuilder ub = new URIBuilder();
  
         ub.setPath(url);
  

  
         ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
  
         ub.setParameters(pairs);
  

  
         HttpGet httpGet = new HttpGet(ub.build());
  
         for (Map.Entry<String, Object> param : headers.entrySet()) {
  
             httpGet.addHeader(param.getKey(), String.valueOf(param.getValue()));
  
         }
  
         return getResult(httpGet);
  
     }
  

  
     public static String httpPostRequest(String url) {
  
         HttpPost httpPost = new HttpPost(url);
  
         return getResult(httpPost);
  
     }
  

  
     public static String httpPostRequest(String url, Map<String, Object> params) throws UnsupportedEncodingException {
  
         HttpPost httpPost = new HttpPost(url);
  
         ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
  
         httpPost.setEntity(new UrlEncodedFormEntity(pairs, CONTENT_TYPE_UTF_8));
  
         return getResult(httpPost);
  
     }
  

  
     public static String httpPostRequest(String url, Map<String, Object> headers, Map<String, Object> params)
  
             throws UnsupportedEncodingException {
  
         HttpPost httpPost = new HttpPost(url);
  

  
         for (Map.Entry<String, Object> param : headers.entrySet()) {
  
             httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
  
         }
  

  
         ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
  
         httpPost.setEntity(new UrlEncodedFormEntity(pairs, CONTENT_TYPE_UTF_8));
  

  
         return getResult(httpPost);
  
     }
  

  
     public static String httpPostJSON(String url, String json) throws UnsupportedEncodingException {
  
         HttpPost httpPost = new HttpPost(url);
  
         StringEntity s = new StringEntity(json);
  
         s.setContentEncoding(CONTENT_TYPE_UTF_8);
  
         s.setContentType(CONTENT_TYPE_JSON);// 发送json数据需要设置contentType
  
         httpPost.setEntity(s);
  
         return getResult(httpPost);
  
     }
  

  

  
     private static ArrayList<NameValuePair> covertParams2NVPS(Map<String, Object> params) {
  
         ArrayList<NameValuePair> pairs = new ArrayList<>();
  
         for (Map.Entry<String, Object> param : params.entrySet()) {
  
             pairs.add(new BasicNameValuePair(param.getKey(), String.valueOf(param.getValue())));
  
         }
  

  
         return pairs;
  
     }
  

  
     /**
  
      * 处理Http请求
  
      *
  
      * @param request
  
      * @return
  
      */
  
     private static String getResult(HttpRequestBase request) {
  

  
         RequestConfig.Builder config = RequestConfig.copy(RequestConfig.DEFAULT);
  
         config.setConnectionRequestTimeout(CONNECTION_TIMEOUT_MS);
  
         config.setSocketTimeout(SO_TIMEOUT_MS);
  

  
         request.setConfig(config.build());
  

  
         // CloseableHttpClient httpClient = HttpClients.createDefault();
  
         CloseableHttpClient httpClient = getHttpClient();
  
         CloseableHttpResponse response = null;
  
         try {
  
             response = httpClient.execute(request);
  
             // response.getStatusLine().getStatusCode();
  
             HttpEntity entity = response.getEntity();
  
             if (entity != null) {
  
                 // long len = entity.getContentLength();// -1 表示长度未知
  
                 return EntityUtils.toString(entity);
  
             }
  
         } catch (IOException e) {
  
             e.printStackTrace();
  
         } finally {
  
             try {
  
                 // 释放Socket流
  
                 response.close();
  
                 // 释放Connection
  
                 // httpClient.close();
  
             } catch (IOException e) {
  
                 e.printStackTrace();
  
             }
  
         }
  

  
         return EMPTY_STR;
  
     }
  

  
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427577-1-1.html 上篇帖子: 回首郑板桥 下篇帖子: 启动tomcat直接报错:org.apache.tomcat.util.digester.Digester startElement
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表