推荐另外一个工具:

OKHttpUtil 功能

  • 根据URL自动判断是请求HTTP还是HTTPS,不需要单独写多余的代码。
  • 默认情况下Cookie自动记录,比如可以实现模拟登录,即第一次访问登录URL后后续请求就是登录状态。
  • 自动识别304跳转并二次请求
  • 支持代理配置
  • 支持referer配置
  • 支持User-Agent配置
  • 自动识别并解压Gzip格式返回内容
  • 支持springboot 配置文件
  • 极简的封装调用
<dependency>
    <groupId>io.github.admin4j</groupId>
    <artifactId>http</artifactId>
    <version>0.4.0</version>
</dependency>

Get

Response response = HttpUtil.get(https://github.com/search, Pair.of(q, okhttp));
System.out.println(response =  + response);
一行代码即可搞定,当然Post请求也很简单:

# JSON 格式的body
Response post = HttpUtil.post(https://oapi.dingtalk.com/robot/send?access_token=27f5954ab60ea8b2e431ae9101b1289c138e85aa6eb6e3940c35ee13ff8b6335, {\msgtype\: \text\,\text\: {\content\:\【反馈提醒】我就是我, 是不一样的烟火\}});
System.out.println(post =  + post);

# form 请求
Map<String, Object> formParams = new HashMap<>(16);
formParams.put(username, admin);
formParams.put(password, admin123);
Response response = HttpUtil.postForm(http://192.168.1.13:9100/auth/login,
                formParams
);
System.out.println(response =  + response);
返回格式为JSON的 可以使用 HttpJsonUtil 自动返回JsonObject

JSONObject object=HttpJsonUtil.get(https://github.com/search,
Pair.of(q,http),
Pair.of(username,agonie201218));
System.out.println(object = +object);
文件上传
File file=new File(C:\\Users\\andanyang\\Downloads\\Sql.txt);
Map<String, Object> formParams=new HashMap<>();
formParams.put(key,test);
formParams.put(file,file);
formParams.put(token,WXyUseb-D4sCum-EvTIDYL-mEehwDtrSBg-Zca7t:qgOcR2gUoKmxt-VnsNb657Oatzo=:eyJzY29wZSI6InpoYW56aGkiLCJkZWFkbGluZSI6MTY2NTMwNzUxNH0=);
Response response=HttpUtil.upload(https://upload.qiniup.com/,formParams);
System.out.println(response);
下载文件
HttpUtil.down(https://gitee.com/admin4j/common-http,path/);
HttpRequest 链式请求
# get
Response response=HttpRequest.get(https://search.gitee.com/?skin=rec&type=repository)
.queryMap(q,admin4j)
.header(HttpHeaderKey.USER_AGENT,admin4j)
.execute();
System.out.println(response = +response);

# post form
Response response=HttpRequest.get(http://192.168.1.13:9100/auth/login)
.queryMap(q,admin4j)
.header(HttpHeaderKey.USER_AGENT,admin4j)
.form(username,admin)
.form(password,admin123)
.execute();
System.out.println(response = +response);

 

 

 

httpUtils  (commons-httpclient)

 0.依赖:

    <!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient -->
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>

 

  最终整理:

package com.icil.esolution.utils;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Map;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.DeleteMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.springframework.web.multipart.MultipartFile;

/***********************************************************************
 * <PRE>
 *
 *  File Name       : URLHttpUtils.java
 * 
 *  Creation Date   : Aug 24, 2018
 * 
 *  Author          : sea
 * 
 * 
 * </PRE>
 ***************************************************************************/

public class URLHttpUtils {

    private static final Logger logger = LoggerFactory.getLogger(URLHttpUtils.class);

    public static synchronized String HttpClientRequest(String message, Header header, String operation, String url) {

        RequestEntity entity = null;
        String response = null;
        PostMethod postMethod = null;
        try {
            logger.info("Enter into HttpClientRequest method ");
            entity = new ByteArrayRequestEntity(message.getBytes("UTF-8"));
            HttpClient httpClient = new HttpClient();
            postMethod = new PostMethod(url + operation);
            postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
            if (header != null) {
                postMethod.setRequestHeader(header);
            }
            postMethod.setRequestEntity(entity);
            httpClient.executeMethod(postMethod);
            response = postMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            postMethod.releaseConnection();
        }
        logger.info("complete of the HttpClientRequest method");
        return response;
    }

    /**
     * 2018-08-26 sea add 3 try
     * 
     * @param jsonMessage
     * @param targetUrl
     * @param header
     * @return
     */
    public static synchronized String HttpClientPostRequest(String jsonMessage, String targetUrl, Header header) {

        logger.info("debug the json message " + jsonMessage);
        logger.info("debug targetUrl " + targetUrl);

        RequestEntity entity = null;
        String response = null;
        PostMethod postMethod = null;
        HttpClient httpClient = new HttpClient();
        try {
            logger.info("Enter into HttpClientRequest method ");
            entity = new ByteArrayRequestEntity(jsonMessage.getBytes("UTF-8"));
            postMethod = new PostMethod(targetUrl);
            postMethod.addRequestHeader("Content-Type", "application/json");
//            postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
            postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
            if (header != null) {
                postMethod.setRequestHeader(header);
            }
            postMethod.setRequestEntity(entity);
            httpClient.executeMethod(postMethod);
            response = postMethod.getResponseBodyAsString();
        } catch (Exception e) {
            logger.info("connect fail ,try to connect again!");
            e.printStackTrace();
            try {
                httpClient.executeMethod(postMethod);
                response = postMethod.getResponseBodyAsString();
            } catch (Exception e2) {
                logger.info("connect second fail ,try to third  time  connect !");
                e2.printStackTrace();
                try {
                    httpClient.executeMethod(postMethod);
                    response = postMethod.getResponseBodyAsString();
                } catch (Exception e3) {
                    logger.info("third  time  connect fail !");
                    e3.printStackTrace();
                    MDC.put("concectException", e3.toString());
                }
            }

        } finally {
            postMethod.releaseConnection();
        }
        logger.info("Complete of the HttpClientRequest method");
        return response;

    }

    
    
    /**
     * @param url
     *        
     */
    public static synchronized String deleteURLRequest(String targetUrl, Map<String, String> map) {

        logger.info("Enter into getURLRequest method ");
        logger.info("debug targetUrl " + targetUrl);

        String response = null;
        DeleteMethod deleteMethod = null;
        try {

            HttpClient httpClient = new HttpClient();
            deleteMethod = new DeleteMethod(targetUrl);
            deleteMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue"));
            httpClient.executeMethod(deleteMethod);
            response = deleteMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            deleteMethod.releaseConnection();
        }
        logger.info("Complete of the getURLRequest method");
        return response;

    }

    /**
     * @param url
     *            , postData @return String @throws
     */
    public static synchronized String getURLRequest(String targetUrl, Map<String, String> map) {

        logger.info("Enter into getURLRequest method ");
        logger.info("debug targetUrl " + targetUrl);

        String response = null;
        GetMethod getMethod = null;
        try {

            HttpClient httpClient = new HttpClient();
            getMethod = new GetMethod(targetUrl);
            getMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue"));
            httpClient.executeMethod(getMethod);
            response = getMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            getMethod.releaseConnection();
        }
        logger.info("Complete of the getURLRequest method");
        return response;

    }

    /**
     * sea add 2 try again 2018-08-24
     * 
     * @param targetUrl
     * @param header
     * @return
     */
    public static synchronized String getURLRequest(String targetUrl, Header header) {

        logger.info("Enter into getURLRequest method ");
        logger.info("debug targetUrl is {}", targetUrl);

        String response = null;
        GetMethod getMethod = null;
        HttpClient httpClient = new HttpClient();
        getMethod = new GetMethod(targetUrl);
        if (header != null) {
            getMethod.addRequestHeader(header);
        }
        try {
            httpClient.executeMethod(getMethod);
            response = getMethod.getResponseBodyAsString();
        } catch (Exception e) {
            logger.info("get connect fail, try to second connect");
            e.printStackTrace();
            try {
                httpClient.executeMethod(getMethod);
                response = getMethod.getResponseBodyAsString();
            } catch (Exception e1) {
                logger.info("get connect fail, try to third time connect");
                e1.printStackTrace();
                try {
                    httpClient.executeMethod(getMethod);
                    response = getMethod.getResponseBodyAsString();
                } catch (Exception e2) {
                    logger.info("It have third time connect but still connect fail,and exception is {}", e2);
                    MDC.put("concectException", e2.toString());
                    e2.printStackTrace();
                }
            }
        } finally {
            getMethod.releaseConnection();
        }
        logger.info("Complete of the getURLRequest method");
        return response;
    }
    
    
    
    /**
     * @Desc POST方式 传带文件的调用
     * @return
     * @throws Exception
     */
    public static String postFileMethod(String url,Map<String,String> params,String multipartFileName,MultipartFile multipartFile,Header header){
        
              HttpClient client = new HttpClient();
               PostMethod method = new PostMethod(url);
               method.addRequestHeader(header);
               String response= null;
               int result=0;
            try {
                File file = null;
                if(multipartFile!=null)
                {
                     //transfer  MultipartFile to file
                    String filename = multipartFile.getName();
                    String originalFilename = multipartFile.getOriginalFilename();
                    int lastIndexOf = originalFilename.lastIndexOf(".");
                    String suffix = originalFilename.substring(lastIndexOf);
                    file=File.createTempFile(filename, suffix);
                    multipartFile.transferTo(file);
                    file.deleteOnExit();  
                    
                    FilePart filePart = new FilePart(multipartFileName,file);//文件参数
                    
                    //set params
                    ArrayList<StringPart> paramList = new ArrayList<>();
                    if(params.size()>0){
                        
                        for (Map.Entry<String, String> entry : params.entrySet())
                        {  
                            StringPart param = new StringPart(entry.getKey(), entry.getValue());  //普通参数
                            paramList.add(param);
                        }
                    }
                    int size = paramList.size();
                     Part[] parts =new Part[size+1];  
                   
                     for(int i=0;i<size;i++){
                         parts[i]=paramList.get(i);
                     }
                     parts[size]=filePart;
                
                    MultipartRequestEntity mre=new MultipartRequestEntity(parts ,method.getParams());    //封装了普通字段和文件字段
                    method.setRequestEntity(mre );
                     result = client.executeMethod(method);
                     response = method.getResponseBodyAsString();
                      // response=  responseHandler(result,method);  //NOSONAR
                }
                } catch (Exception e) {
                e.printStackTrace();
                logger.info("post data to 3th fail ,try to post again.");
                 try {
                        result = client.executeMethod(method);
//                           response=  responseHandler(result,method); //NOSONAR
                           response = method.getResponseBodyAsString();
                } catch (Exception e2) {
                    logger.info("post data to 3th second tine fail ,try to post again.");
                    try {
                          result = client.executeMethod(method);
//                           response=  responseHandler(result,method); //NOSONAR
                           response = method.getResponseBodyAsString();
                    } catch (Exception e3) {
                        e3.printStackTrace();
                        MDC.put("concectException", e3.toString());
                        logger.info("post data to 3th third  tine fail .");
                    }
                }
            }
              finally {
                method.releaseConnection();
            }
            logger.info("end the PostMethodFile method");
            return  response;
    }
    
    
    /**
     * test post method
     * @param result
     * @param method
     * @return
     * @throws IOException
     */
    /**
     * @Desc POST方式 传带文件的调用
     * @return
     * @throws Exception
     */
    public static String postFile(String url,String multipartFileName,MultipartFile multipartFile,Header header){
        
              HttpClient client = new HttpClient();
               PostMethod method = new PostMethod(url);
               method.addRequestHeader(header);
               String response= null;
               int result=0;
            try {
                File file = null;
                if(multipartFile!=null)
                {
                     //transfer  MultipartFile to file
                    String filename = multipartFile.getName();
                    String originalFilename = multipartFile.getOriginalFilename();
                    int lastIndexOf = originalFilename.lastIndexOf(".");
                    String suffix = originalFilename.substring(lastIndexOf);
                    file=File.createTempFile(filename, suffix);
                    multipartFile.transferTo(file);
                    file.deleteOnExit();  
                    FilePart filePart = new FilePart(multipartFileName,file);//文件参数
                    Part[] parts ={filePart};
                
                    MultipartRequestEntity mre=new MultipartRequestEntity(parts ,method.getParams());    //封装了普通字段和文件字段
                    method.setRequestEntity(mre);
                }    
                     result = client.executeMethod(method);
                     response = method.getResponseBodyAsString();
                      
                       response=  responseHandler(result,method);  //NOSONAR
                
                } catch (Exception e) {
                e.printStackTrace();
                logger.info("post data to 3th fail ,try to post again.");
                 try {
                        result = client.executeMethod(method);
                       response=  responseHandler(result,method); //NOSONAR
                         //  response = method.getResponseBodyAsString();
                } catch (Exception e2) {
                    logger.info("post data to 3th second tine fail ,try to post again.");
                    try {
                          result = client.executeMethod(method);
                           response=  responseHandler(result,method); //NOSONAR
                         //  response = method.getResponseBodyAsString();
                    } catch (Exception e3) {
                        e3.printStackTrace();
                        MDC.put("concectException", e3.toString());
                        logger.info("post data to 3th third  tine fail .");
                    }
                }
            }
              finally {
                method.releaseConnection();
            }
            logger.info("end the PostMethodFile method");
            return  response;
    }
    
     private static String responseHandler(int result, PostMethod method) throws IOException {
        if (result == HttpStatus.SC_OK) {
            InputStream in = method.getResponseBodyAsStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = in.read(buffer)) != -1) {
                baos.write(buffer, 0, len);
            }
            return URLDecoder.decode(baos.toString(), "UTF-8");
        } else {
            return null;
        }
    }

    /**
     * transfer InputStream to a File
     * @param ins
     * @param file
     */
    public static void inputStreamToFile(InputStream ins,File file) {
          try {
           OutputStream os = new FileOutputStream(file);
           int bytesRead = 0;
           byte[] buffer = new byte[8192];
           while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
            os.write(buffer, 0, bytesRead);
           }
           os.close();
           ins.close();
          } catch (Exception e) {
           e.printStackTrace();
          }
         }
    

    /**
     * 2018-08-24 Sea add
     * @param key
     * @param value
     * @return
     */
    public static Header getBasicAuthorizationHeader(String key, String value) {
        Header header = new Header();
        logger.info("header key is :{} ", key);
        header.setName("Authorization");
        header.setValue("Basic " + Base64.getEncoder().encodeToString((key + ":" + value).getBytes()));
        return header;
    }

    
    
}
View Code

 

 

post 带文件上传 (表单提交) 

 

/**
     *           <dependency>
     *               <groupId>commons-httpclient</groupId>
     *               <artifactId>commons-httpclient</artifactId>
     *               <version>3.1</version>
     *           </dependency>
     * @param url
     * @param formData
     * @Author Sea 
     * @return
     */
    public  String postFormData(String url,Map<String,Object> formData)
    {
        HttpClient client = new HttpClient();
        PostMethod post = new PostMethod(url);
        try{
            List<Part> formArgsList = new ArrayList<>();
            for (Map.Entry<String, Object> kv :formData.entrySet()) {
                String key = kv.getKey();
                Object value = kv.getValue();
                if(value instanceof File){
                    FilePart fp = new FilePart(key, (File) value);
                    fp.setCharSet("utf-8");
                    formArgsList.add(fp);
                }else
                {
                    formArgsList.add(new StringPart(key, value+"", "UTF-8"));
                }
            }
            Part[] parts = formArgsList.toArray(new Part[formArgsList.size()]);
            MultipartRequestEntity entity = new MultipartRequestEntity(parts, new HttpMethodParams());
            post.setRequestEntity(entity);
            client.executeMethod(post);
            //释放连接,以免超过服务器负荷
            String responseBodyAsString = post.getResponseBodyAsString();
            return  responseBodyAsString;
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }finally {
            //释放连接,以免超过服务器负荷
            post.releaseConnection();
        }
        return null;
    }

 

 

 

 

 

 

 

 

    /**
     * @Desc POST方式 传带文件的调用
     * @return
     * @throws Exception
     */
    public static String postFileMethod(String url,Map<String,String> params,String multipartFileName,MultipartFile multipartFile,Header header){
        
              HttpClient client = new HttpClient();
               PostMethod method = new PostMethod(url);
               method.addRequestHeader(header);
               String response= null;
               int result=0;
            try {
                File file = null;
                FilePart filePart =null;
                if(multipartFile!=null)
                {
                     //transfer  MultipartFile to file
                    String filename = multipartFile.getName();
                    String originalFilename = multipartFile.getOriginalFilename();
                    int lastIndexOf = originalFilename.lastIndexOf(".");
                    String suffix = originalFilename.substring(lastIndexOf);
                    file=File.createTempFile(filename, suffix);
                    multipartFile.transferTo(file);
                    file.deleteOnExit();  
                    
                     filePart = new FilePart(multipartFileName,file);//文件参数
                    
                }
                    //set params
                    ArrayList<StringPart> paramList = new ArrayList<>();
                    if(params.size()>0){
                        
                        for (Map.Entry<String, String> entry : params.entrySet())
                        {  
                            StringPart param = new StringPart(entry.getKey(), entry.getValue());  //普通参数
                            paramList.add(param);
                        }
                    }
                    int size = paramList.size();
                    Part[] parts =null;
                    //if  filePart is not null
                    if(filePart!=null){
                         parts =new Part[size+1];  
                        for(int i=0;i<size;i++){
                            parts[i]=paramList.get(i);
                        }
                        parts[size]=filePart;
                    }else {
                         parts =new Part[size];  
                        for(int i=0;i<size;i++){
                            parts[i]=paramList.get(i);
                        }
                    }
                
                    MultipartRequestEntity mre=new MultipartRequestEntity(parts ,method.getParams());    //封装了普通字段和文件字段
                    method.setRequestEntity(mre );
                     result = client.executeMethod(method);
                     response = method.getResponseBodyAsString();
                      // response=  responseHandler(result,method);  //NOSONAR
                
                } catch (Exception e) {
                e.printStackTrace();
                logger.info("post data to 3th fail ,try to post again.");
                 try {
                        result = client.executeMethod(method);
//                           response=  responseHandler(result,method); //NOSONAR
                           response = method.getResponseBodyAsString();
                } catch (Exception e2) {
                    logger.info("post data to 3th second tine fail ,try to post again.");
                    try {
                          result = client.executeMethod(method);
//                           response=  responseHandler(result,method); //NOSONAR
                           response = method.getResponseBodyAsString();
                    } catch (Exception e3) {
                        e3.printStackTrace();
                        MDC.put("concectException", e3.toString());
                        logger.info("post data to 3th third  tine fail .");
                    }
                }
            }
              finally {
                method.releaseConnection();
            }
            logger.info("end the PostMethodFile method");
            return  response;
    }
View Code

 

 

 

1.

package com.icil.esolution.utils;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.Base64;
import java.util.Map;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.DeleteMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;



public class URLHttpUtils {

    private static final Logger logger = LoggerFactory.getLogger(URLHttpUtils.class);

    public static synchronized String HttpClientRequest(String message, Header header, String operation, String url) {

        RequestEntity entity = null;
        String response = null;
        PostMethod postMethod = null;
        try {
            logger.info("Enter into HttpClientRequest method ");
            entity = new ByteArrayRequestEntity(message.getBytes("UTF-8"));
            HttpClient httpClient = new HttpClient();
            postMethod = new PostMethod(url + operation);
            postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
            if (header != null) {
                postMethod.setRequestHeader(header);
            }
            postMethod.setRequestEntity(entity);
            httpClient.executeMethod(postMethod);
            response = postMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            postMethod.releaseConnection();
        }
        logger.info("complete of the HttpClientRequest method");
        return response;
    }

    /**
     * 2018-08-26 sea add 3 try
     * @param jsonMessage
     * @param targetUrl
     * @param header
     * @return
     */
    public static synchronized String HttpClientPostRequest(String jsonMessage, String targetUrl, Header header) {

        logger.info("debug the json message " + jsonMessage);
        logger.info("debug targetUrl " + targetUrl);

        RequestEntity entity = null;
        String response = null;
        PostMethod postMethod = null;
        HttpClient httpClient = new HttpClient();
        try {
            logger.info("Enter into HttpClientRequest method ");
            entity = new ByteArrayRequestEntity(jsonMessage.getBytes("UTF-8"));
            postMethod = new PostMethod(targetUrl);
            postMethod.addRequestHeader("Content-Type", "application/json");
            postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
            if (header != null) {
                postMethod.setRequestHeader(header);
            }
            postMethod.setRequestEntity(entity);
            httpClient.executeMethod(postMethod);
            response = postMethod.getResponseBodyAsString();
        } catch (Exception e) {
            logger.info("connect fail ,try to connect again!");
            e.printStackTrace();
            try {
                httpClient.executeMethod(postMethod);
                response = postMethod.getResponseBodyAsString();
            } catch (Exception e2) {
                logger.info("connect second fail ,try to third  time  connect !");
                e2.printStackTrace();
                try {
                    httpClient.executeMethod(postMethod);
                    response = postMethod.getResponseBodyAsString();
                } catch (Exception e3) {
                    logger.info("third  time  connect fail !");
                    e3.printStackTrace();
                    MDC.put("concectException", e3.toString());
                }
            }

        } finally {
            postMethod.releaseConnection();
        }
        logger.info("Complete of the HttpClientRequest method");
        return response;

    }

    /**
     * @param url , postData @return String @throws
     */
    public static synchronized String postURLRequest(String url, String postData) {

        logger.debug("Enter into postURLRequest method .");
        StringBuffer buffer = new StringBuffer();
        try {
            /*
             * here skip the https certificate verify, or should install cert into JDK
             * .currently skip the validate for certificate.
             * URLHttpUtils.httpsSkipCertificates();
             */
            trustAllHttpsCertificates();
            HttpsURLConnection.setDefaultHostnameVerifier(hv);
            URL obj = new URL(url);
            HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection();
            conn.setRequestMethod("POST");
            // USPS web service require to set this content-type.
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // open the key that can send the data to webservice.
            conn.setDoOutput(true);
            // open the key that can receive the data from webservice.
            conn.setDoInput(true);
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
            wr.writeBytes(postData);
            wr.flush();
            wr.close();
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        logger.debug("The response content is : {}", buffer.toString());
        logger.debug("Complete in postURLRequest method .");
        return buffer.toString();
    }

    /**
     * @param url , postData @return String @throws
     */
    public static synchronized String deleteURLRequest(String targetUrl, Map<String, String> map) {

        logger.info("Enter into getURLRequest method ");
        logger.info("debug targetUrl " + targetUrl);

        String response = null;
        DeleteMethod deleteMethod = null;
        try {

            HttpClient httpClient = new HttpClient();
            deleteMethod = new DeleteMethod(targetUrl);
            deleteMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue"));
            httpClient.executeMethod(deleteMethod);
            response = deleteMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            deleteMethod.releaseConnection();
        }
        logger.info("Complete of the getURLRequest method");
        return response;

    }

    /**
     * @param url , postData @return String @throws
     */
    public static synchronized String getURLRequest(String targetUrl, Map<String, String> map) {

        logger.info("Enter into getURLRequest method ");
        logger.info("debug targetUrl " + targetUrl);

        String response = null;
        GetMethod getMethod = null;
        try {

            HttpClient httpClient = new HttpClient();
            getMethod = new GetMethod(targetUrl);
            getMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue"));
            httpClient.executeMethod(getMethod);
            response = getMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            getMethod.releaseConnection();
        }
        logger.info("Complete of the getURLRequest method");
        return response;

    }

    /**
     * sea add 2 try again 2018-08-24
     * 
     * @param targetUrl
     * @param header
     * @return
     */
    public static synchronized String getURLRequest(String targetUrl, Header header) {

        logger.info("Enter into getURLRequest method ");
        logger.info("debug targetUrl is {}", targetUrl);

        String response = null;
        GetMethod getMethod = null;
        HttpClient httpClient = new HttpClient();
        getMethod = new GetMethod(targetUrl);
        if (header != null) {
            getMethod.addRequestHeader(header);
        }
        try {
            httpClient.executeMethod(getMethod);
            response = getMethod.getResponseBodyAsString();
        } catch (Exception e) {
            logger.info("get connect fail, try to second connect");
            e.printStackTrace();
            try {
                httpClient.executeMethod(getMethod);
                response = getMethod.getResponseBodyAsString();
            } catch (Exception e1) {
                logger.info("get connect fail, try to third time connect");
                e1.printStackTrace();
                try {
                    httpClient.executeMethod(getMethod);
                    response = getMethod.getResponseBodyAsString();
                } catch (Exception e2) {
                    logger.info("It have third time connect but still connect fail,and exception is {}", e2);
                    MDC.put("concectException", e2.toString());
                    e2.printStackTrace();
                }
            }
        } finally {
            getMethod.releaseConnection();
        }
        logger.info("Complete of the getURLRequest method");
        return response;

    }

    /**
     * @param url , postData @return String @throws
     */
    public static synchronized String postURLRequest2(String jsonMessage, String targetUrl, Map<String, String> map) {

        logger.info("Enter into postURLRequest2 method ");
        logger.info("debug the json message " + jsonMessage);
        logger.info("debug targetUrl " + targetUrl);

        RequestEntity entity = null;
        String response = null;
        PostMethod postMethod = null;
        try {
            entity = new ByteArrayRequestEntity(jsonMessage.getBytes("UTF-8"));
            HttpClient httpClient = new HttpClient();
            postMethod = new PostMethod(targetUrl);
            postMethod.addRequestHeader("Content-Type", "application/json");
            postMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue"));
            postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");

            postMethod.setRequestEntity(entity);
            httpClient.executeMethod(postMethod);
            response = postMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            postMethod.releaseConnection();
        }
        logger.info("Complete of the HttpClientRequest method");
        return response;

    }

    // 2016-10-03, wrightdeng,#3257 add skip https verify function here.
    static HostnameVerifier hv = new HostnameVerifier() {
        public boolean verify(String urlHostName, SSLSession session) {
            System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
            return true;
        }
    };

    private static synchronized void trustAllHttpsCertificates() throws Exception {
        javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
        javax.net.ssl.TrustManager tm = new miTM();
        trustAllCerts[0] = tm;
        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, null);
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    }

    static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
            return true;
        }

        public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
            return true;
        }

        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
                throws java.security.cert.CertificateException {
            return;
        }

        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
                throws java.security.cert.CertificateException {
            return;
        }
    }

    /**
     * 2018-08-24 Sea add
     * 
     * @param key
     * @param value
     * @return
     */
    public static Header getBasicAuthorizationHeader(String key, String value) {
        Header header = new Header();
        logger.info("header key is :{} ", key);
        header.setName("Authorization");
        header.setValue("Basic " + Base64.getEncoder().encodeToString((key + ":" + value).getBytes()));
        return header;
    }

}
View Code

 

2.不推荐2

package com.icil.edi.ws.printService.utils;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.Map;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.DeleteMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class URLHttpUtils {

    private static final Logger logger = LoggerFactory.getLogger(URLHttpUtils.class);

    /*
     * public static void httpsSkipCertificates() {
     * 
     * try { trustAllHttpsCertificates(); } catch (Exception e) { // TODO
     * Auto-generated catch block e.printStackTrace(); }
     * 
     * }
     */

    public synchronized static String HttpClientRequest(String message, Header header, String operation, String url) {

        RequestEntity entity = null;
        String response = null;
        PostMethod postMethod = null;
        try {
            logger.info("Enter into HttpClientRequest method ");
            entity = new ByteArrayRequestEntity(message.getBytes("UTF-8"));
            HttpClient httpClient = new HttpClient();
            postMethod = new PostMethod(url + operation);
            postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
            if (header != null) {
                postMethod.setRequestHeader(header);
            }
            postMethod.setRequestEntity(entity);
            httpClient.executeMethod(postMethod);
            response = postMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            postMethod.releaseConnection();
        }
        logger.info("Complete of the HttpClientRequest method");
        return response;
    }

    public synchronized static String HttpClientRequest(String jsonMessage, String targetUrl, Header header) {

        logger.info("debug the json message " + jsonMessage);
        logger.info("debug targetUrl " + targetUrl);
        // logger.info("debug the "+header.getName()+" ----- "+header.getValue());

        RequestEntity entity = null;
        String response = null;
        PostMethod postMethod = null;
        try {
            logger.info("Enter into HttpClientRequest method ");
            entity = new ByteArrayRequestEntity(jsonMessage.getBytes("UTF-8"));
            HttpClient httpClient = new HttpClient();
            postMethod = new PostMethod(targetUrl);
            postMethod.addRequestHeader("Content-Type", "application/json");
            postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
            if (header != null) {
                postMethod.setRequestHeader(header);
            }
            postMethod.setRequestEntity(entity);
            httpClient.executeMethod(postMethod);
            response = postMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            postMethod.releaseConnection();
        }
        logger.info("Complete of the HttpClientRequest method");
        return response;

        /*
         * Client client = ClientBuilder.newClient(); Entity payload =
         * Entity.json(jsonMessage); Response response = client.target(targetUrl).
         * request(MediaType.APPLICATION_JSON_TYPE). header(header.getName(),
         * header.getValue()).post(payload); return response.getEntity().toString() ;
         */
    }

    /**
     * @param url , postData @return String @throws
     */
    public synchronized static String postURLRequest(String url, String postData) {

        logger.debug("Enter into postURLRequest method .");
        StringBuffer buffer = new StringBuffer();
        try {
            // here skip the https certificate verify, or should install cert into JDK
            // .currently skip the
            // validate for certificate.
            // URLHttpUtils.httpsSkipCertificates();
            trustAllHttpsCertificates();
            HttpsURLConnection.setDefaultHostnameVerifier(hv);
            URL obj = new URL(url);
            HttpsURLConnection conn = (HttpsURLConnection) obj.openConnection();
            conn.setRequestMethod("POST");
            // USPS web service require to set this content-type.
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // open the key that can send the data to webservice.
            conn.setDoOutput(true);
            // open the key that can receive the data from webservice.
            conn.setDoInput(true);
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
            wr.writeBytes(postData);
            wr.flush();
            wr.close();
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        logger.debug("The response content : " + buffer.toString());
        logger.debug("Complete in postURLRequest method .");
        return buffer.toString();
    }

    /**
     * @param url , postData @return String @throws
     */
    public synchronized static String deleteURLRequest(String targetUrl, Map<String, String> map) {

        logger.info("Enter into getURLRequest method ");
        logger.info("debug targetUrl " + targetUrl);
        // logger.info("debug the "+header.getName()+" ----- "+header.getValue());

        RequestEntity entity = null;
        String response = null;
        DeleteMethod deleteMethod = null;
        try {

            HttpClient httpClient = new HttpClient();
            deleteMethod = new DeleteMethod(targetUrl);
            deleteMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue"));
            httpClient.executeMethod(deleteMethod);
            response = deleteMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            deleteMethod.releaseConnection();
        }
        logger.info("Complete of the getURLRequest method");
        return response;

    }

    /**
     * @param url , postData @return String @throws
     */
    public synchronized static String getURLRequest(String targetUrl, Map<String, String> map) {

        logger.info("Enter into getURLRequest method ");
        logger.info("debug targetUrl " + targetUrl);
        // logger.info("debug the "+header.getName()+" ----- "+header.getValue());

        RequestEntity entity = null;
        String response = null;
        GetMethod getMethod = null;
        try {

            HttpClient httpClient = new HttpClient();
            getMethod = new GetMethod(targetUrl);
            getMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue"));
            httpClient.executeMethod(getMethod);
            response = getMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            getMethod.releaseConnection();
        }
        logger.info("Complete of the getURLRequest method");
        return response;

    }
    
    /**
     * @param url , postData @return String @throws
     */
    public synchronized static String postURLRequest2(String jsonMessage, String targetUrl, Map<String, String> map) {

        logger.info("Enter into postURLRequest2 method ");
        logger.info("debug the json message " + jsonMessage);
        logger.info("debug targetUrl " + targetUrl);
        // logger.info("debug the "+header.getName()+" ----- "+header.getValue());

        RequestEntity entity = null;
        String response = null;
        PostMethod postMethod = null;
        try {
            entity = new ByteArrayRequestEntity(jsonMessage.getBytes("UTF-8"));
            HttpClient httpClient = new HttpClient();
            postMethod = new PostMethod(targetUrl);
            postMethod.addRequestHeader("Content-Type", "application/json");
            postMethod.addRequestHeader(map.get("apiKey"), map.get("apiValue"));
            postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");

            postMethod.setRequestEntity(entity);
            httpClient.executeMethod(postMethod);
            response = postMethod.getResponseBodyAsString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (HttpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            postMethod.releaseConnection();
        }
        logger.info("Complete of the HttpClientRequest method");
        return response;

    }
    
    
    // 2016-10-03, wrightdeng,#3257 add skip https verify function here.
    static HostnameVerifier hv = new HostnameVerifier() {
        public boolean verify(String urlHostName, SSLSession session) {
            System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
            // TODO Auto-generated method stub
            return true;
        }
    };

    private synchronized static void trustAllHttpsCertificates() throws Exception {
        javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
        javax.net.ssl.TrustManager tm = new miTM();
        trustAllCerts[0] = tm;
        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, null);
        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    }

    static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
            return true;
        }

        public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
            return true;
        }

        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
                throws java.security.cert.CertificateException {
            return;
        }

        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
                throws java.security.cert.CertificateException {
            return;
        }
    }
}
View Code

 eg:

//get 的使用


String response = URLHttpUtils.getURLRequest(url, null);



post ;的使用

String apiToken = PropertiesUtils.getConfigInfo(EdiServiceConstant.SECURITY_KEY, EdiServiceConstant.AIR21KEY);
        String userToken = PropertiesUtils.getConfigInfo(EdiServiceConstant.SECURITY_KEY, EdiServiceConstant.AIR21VALUE);
        // Assemble Authentication Header
        Header header = accountServiceFactory.getBasicAuthorizationHeader(apiToken, userToken);
////////////////////
    public Header getBasicAuthorizationHeader(String key,String value) {
            Header header = new Header();
            LOGGER.info("header key is :{}",key);
            header.setName(PrintConstant.Authorization);
            header.setValue("Basic "+Base64.getEncoder().encodeToString((key+":"+value).getBytes()));
        return header;
    }
//////////////////

 response = URLHttpUtils.HttpClientRequest(requestData, air21Url, header);
View Code

post  带文件上传

一、PostMethod一般请求
    /**
     * POST方式
     * @return
     * @throws Exception
     */
    public static String PostMethodTest() throws Exception{
        System.out.println("开始");

            HttpClient client = new HttpClient();
            PostMethod method = new PostMethod(URI);
            try{

                method.addRequestHeader(new Header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8") );    

    //          method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

                method.addParameter(new NameValuePair("appid", "XXXX") );
                method.addParameter(new NameValuePair("appkey", "XXXX") );

    //          method.addParameter("appid", "XXXX");
    //          method.addParameter("appkey", "XXXX");

                int result = client.executeMethod(method);
                if (result == HttpStatus.SC_OK) {
                    InputStream in = method.getResponseBodyAsStream();
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int len = 0;
                    while ((len = in.read(buffer)) != -1) {
                        baos.write(buffer, 0, len);
                    }
                    return URLDecoder.decode(baos.toString(), "UTF-8");
                } else {
                    throw new Exception("HTTP ERROR Status: " + method.getStatusCode() + ":" + method.getStatusText());
                }
            }finally {
                method.releaseConnection();
            }

    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
二、PostMethod带文件方式
    /**
     * POST方式 传带文件的调用
     * @return
     * @throws Exception
     */
    public static String PostMethodFileTest() throws Exception{
        System.out.println("开始");

            HttpClient client = new HttpClient();
            PostMethod method = new PostMethod(URI);
            try{

                FilePart filePart = new FilePart("file",new File("D:\\8\\5972-41-2017-06-07-1440-16406.wav"));//文件参数
                StringPart questionId = new StringPart("questionId","10001");//普通参数
                StringPart userId = new StringPart("userId","765709");//普通参数
                StringPart homeworkId = new StringPart("homeworkId","950");//普通参数

                Part[] parts ={filePart,questionId,userId,homeworkId};
                MultipartRequestEntity mre=new MultipartRequestEntity(parts ,method.getParams());    //封装了普通字段和文件字段
                method.setRequestEntity(mre );
                int result = client.executeMethod(method);
                if (result == HttpStatus.SC_OK) {
                    InputStream in = method.getResponseBodyAsStream();
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    int len = 0;
                    while ((len = in.read(buffer)) != -1) {
                        baos.write(buffer, 0, len);
                    }
                    return URLDecoder.decode(baos.toString(), "UTF-8");
                } else {
                    throw new Exception("HTTP ERROR Status: " + method.getStatusCode() + ":" + method.getStatusText());
                }
            }finally {
                method.releaseConnection();
            }
    }
View Code

 

 

解析response:

import org.json.JSONObject;
import org.json.XML;

jsonObject = XML.toJSONObject(response);

posted on 2018-07-13 20:25  lshan  阅读(534)  评论(0编辑  收藏  举报