zoukankan      html  css  js  c++  java
  • httpclient4.3.6/httpcore-4.4自己封装的工具类

    引入jar包

    httpclient4.3.6/httpcore-4.4

    package com.develop.util;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.net.URLEncoder;
    import java.security.KeyManagementException;
    import java.security.KeyStoreException;
    import java.security.NoSuchAlgorithmException;
    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 org.apache.http.HttpEntity;
    import org.apache.http.HttpHeaders;
    import org.apache.http.HttpStatus;
    import org.apache.http.NameValuePair;
    import org.apache.http.StatusLine;
    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.client.utils.HttpClientUtils;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.conn.ssl.SSLContextBuilder;
    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.util.EntityUtils;
    
    
    
    /**
     * 应用jar包 httpclient-4.3.6/httpcore-4.4
     * @author Administrator
     *
     */
    public class HttpClientUtil {
        
        private static String defaultCharset = "UTF-8";//默认编码
        private static int connectionRequestTimeout = 60000;
        private static int connectTimeout = 60000;
        private static int socketTimeout = 60000;
        
        /**
         * httpclient post请求(不带编码,默认UTF-8)
         * @param uri
         * @param param 参数支持string map
         * @return
         */
        public static String doHttpPost(String uri,Object param){
            return doHttpPost(uri, param, defaultCharset);
        }
        
        /**
         * httpclient post请求
         * @param uri
         * @param param 支持string map
         * @param charset
         * @return
         */
        public static String doHttpPost(String uri,Object param,String charset){
            if(uri==null||"".equals(uri)){
                System.out.println("请求uri为空!");
                return null;
            }
            int index = uri.indexOf("?");
            if(index>-1){
                uri = uri.substring(0, index);
            }
    
            CloseableHttpClient httpClient = createHttpClient(uri);
            HttpPost httpPost = new HttpPost(uri);
            httpPost.setConfig(RequestConfig.custom()
                    .setConnectionRequestTimeout(connectionRequestTimeout)
                    .setConnectTimeout(connectTimeout)
                    .setSocketTimeout(socketTimeout)
                    .build());
            httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded;charset="+charset);
            //有些服务器做了限制,访问不到,需要伪装浏览器请求
            httpPost.setHeader(HttpHeaders.USER_AGENT,"Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");
    //        httpPost.getParams().setParameter(HttpHeaders.USER_AGENT,
    //                "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");//如果放到header中不管用,就打开注释
            
            //将参数封装到HttpEntity
            HttpEntity requestEntity = null;
            if(param!=null&&!"".equals(param)){
                requestEntity = getRequestEntity(param,charset);
                httpPost.setEntity(requestEntity);
            }
    
            CloseableHttpResponse response = null;
            HttpEntity responseEntity = null;
            try {
                response = httpClient.execute(httpPost);
                StatusLine statusLine = response.getStatusLine();
                int statusCode = statusLine.getStatusCode();
                System.out.println("HttpClientUtil(doHttpPost)返回状态码statusCode:"+statusCode);
                if(statusCode!=HttpStatus.SC_OK){
                    return null;
                }
                responseEntity = response.getEntity();
                String result = EntityUtils.toString(responseEntity, charset);
                System.out.println("HttpClientUtil(doHttpPost)返回info:"+result);
                return result;
                
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    EntityUtils.consume(responseEntity);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                HttpClientUtils.closeQuietly(response);
                try {
                    EntityUtils.consume(requestEntity);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                HttpClientUtils.closeQuietly(httpClient);
            }
            
            return null;
        }
        
        
        /**
         * 根据传入的参数类型获取对应的封装了参数的httpEntity
         * @param param
         * @return
         */
        private static HttpEntity getRequestEntity(Object param,String charset){
            if(param==null){
                return null;
            }
            
            if(param instanceof String){
                String paramStr = (String)param;
                int index = paramStr.indexOf("?");//问号位置
                if(index>-1){
                    paramStr = paramStr.substring(index+1);
                }
                StringEntity stringEntity = new StringEntity(paramStr,charset);
                stringEntity.setContentType("application/x-www-form-urlencoded;charset="+charset);
                return stringEntity;
            }else if(param instanceof Map){
                Map paramMap = (Map)param;
                int paramSize = paramMap.size();
                if(paramSize==0){
                    return null;
                }
                List<NameValuePair> list = new ArrayList<NameValuePair>(paramSize);
                
                Iterator iterator = paramMap.keySet().iterator();
                while(iterator.hasNext()){
                    Object key = iterator.next();
                    Object value = paramMap.get(key);
                    NameValuePair nameValuePair = new BasicNameValuePair(key.toString(), value.toString());
                    list.add(nameValuePair);
                }
    
                UrlEncodedFormEntity urlEncodedFormEntity = null;
                try {
                    urlEncodedFormEntity = new UrlEncodedFormEntity(list,charset);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
    
                return urlEncodedFormEntity;
            }
            
            return null;
    
        }
        
        
        /**
         * httpclient get请求(不带编码,默认UTF-8)
         * @param uri
         * @param param
         * @return
         */
        public static String doHttpGet(String uri,String param){
            return doHttpGet(uri,param ,defaultCharset);
        }
        
        /**
         * httpclient get请求
         * @param uri
         * @param param
         * @param charset
         * @return
         */
        public static String doHttpGet(String uri,String param,String charset){
            if(uri==null||"".equals(uri)){
                System.out.println("请求uri为空!");
                return null;
            }
            
            int index = uri.indexOf("?");
            if(index>-1){
                uri = uri.substring(0, index);
            }
            
            uri += encodeParam(param, charset);
    
            CloseableHttpClient httpClient = createHttpClient(uri);
            HttpGet httpGet = new HttpGet(uri);
            httpGet.setConfig(RequestConfig.custom()
                    .setConnectionRequestTimeout(connectionRequestTimeout)
                    .setConnectTimeout(connectTimeout)
                    .setSocketTimeout(socketTimeout)
                    .build());
            httpGet.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded;charset="+charset);
            //有些服务器做了限制,访问不到,需要伪装浏览器请求
            httpGet.setHeader(HttpHeaders.USER_AGENT,"Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");
    //        httpGet.getParams().setParameter(HttpHeaders.USER_AGENT,
    //                "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");//如果放到header中不管用,就打开注释
                    
            CloseableHttpResponse response = null;
            HttpEntity responseEntity = null;
            try {
                response = httpClient.execute(httpGet);
                StatusLine statusLine = response.getStatusLine();
                int statusCode = statusLine.getStatusCode();
                System.out.println("HttpClientUtil(doHttpGet)返回状态码statusCode:"+statusCode);
                if(statusCode!=HttpStatus.SC_OK){
                    return null;
                }
                responseEntity = response.getEntity();
                String result = EntityUtils.toString(responseEntity, charset);
                System.out.println("HttpClientUtil(doHttpGet)返回info:"+result);
                return result;
                
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    EntityUtils.consume(responseEntity);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                HttpClientUtils.closeQuietly(response);
                HttpClientUtils.closeQuietly(httpClient);
            }
            
            return null;
        }
        
        /**
         * 将get请求的参数进行编码
         * @param param
         * @param charset
         * @return
         */
        private static String encodeParam(String param,String charset){
            if(param==null){
                return "";
            }
            int index = param.indexOf("?");//问号位置
            if(index>-1){
                param = param.substring(index+1);
            }
            if(param.length()==0){
                return "";
            }
            String[] keyAndValues = param.split("&");
            if(keyAndValues==null||keyAndValues.length==0){
                return "";
            }
            
            String encodedParam = "";
            
            int count = 0;
            for(String keyAndValue:keyAndValues){
                count ++;
                String[] arr = keyAndValue.split("=",2);
                if(arr==null||arr.length==0){
                    System.out.println("参数("+keyAndValue+")异常!");
                    continue;
                }
                
                String key = arr[0];
                String value = arr[1];
                
                if("null".equals(value)){//处理参数值为字符串的null,置空
                    value = "";
                }
                
                if(value!=null&&!"".equals(value)){
                    try {
                        value = URLEncoder.encode(value, charset);
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
    
                encodedParam  += (key +"="+ value);
                
                if(count<keyAndValues.length){
                    encodedParam += "&";
                }
                
            }
            
            if(encodedParam.length()!=0){
                encodedParam = "?"+ encodedParam;
            }
            
            return encodedParam;
        }
        
    
        /**
         * 创建HttpClient
         * @param uri
         * @return
         */
        private static CloseableHttpClient createHttpClient(String uri){
            
            if(uri!=null&&uri.indexOf("https")>-1){
                try {
                    SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                        //信任所有
                        @Override
                        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();
        }
        
    }
  • 相关阅读:
    [原创]什么是安全性测试
    [原创]如何有效的考核测试人员
    [原创]MySql官方压力测试工具Mysqlslap
    [原创软件测试工作技能
    [原创]如何有效构建测试环境
    [原创]常见系统测试类型总结
    [原创]Kjava手机顽童模拟器
    [原创]浅谈测试人员提交缺陷记录
    [原创]Windows/Unix 资源性能计数器
    [原创]戴明PDCA方法
  • 原文地址:https://www.cnblogs.com/jinzhiming/p/5761856.html
Copyright © 2011-2022 走看看