• httpclient封装


    pom文件:

            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.13</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>4.4.13</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpmime</artifactId>
                <version>4.5.7</version>
            </dependency>
            <dependency>
                <groupId>commons-httpclient</groupId>
                <artifactId>commons-httpclient</artifactId>
                <version>3.1</version>
            </dependency>

    代码:

    package com.example.demo.server;
    
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.apache.http.HttpEntity;
    import org.apache.http.NameValuePair;
    import org.apache.http.NoHttpResponseException;
    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.conn.HttpHostConnectException;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.entity.mime.MultipartEntityBuilder;
    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;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    
    import java.io.*;
    import java.net.ConnectException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.nio.charset.Charset;
    import java.security.KeyManagementException;
    import java.security.NoSuchAlgorithmException;
    import java.util.*;
    import java.util.Map.Entry;
    
    @Component
    public class HttpRequest {
        private static final Logger log = LoggerFactory.getLogger(HttpRequest.class);
        /**
         * 使用HttpClient以JSON格式发送post请求
         * @param urlParam
         * @param jsonparams
         * @param socketTimeout
         * @return
         * @throws NoSuchAlgorithmException
         * @throws KeyManagementException
         * @throws UnsupportedEncodingException
         * @throws IOException
         */
        public static String httpClientPost(String urlParam,String jsonparams,Integer socketTimeout) throws NoSuchAlgorithmException, KeyManagementException, UnsupportedEncodingException, IOException{
            StringBuffer resultBuffer = null;
            CloseableHttpClient httpclient=HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(urlParam);
            RequestConfig requestConfig = RequestConfig.custom()  
                    .setConnectTimeout(3000).setConnectionRequestTimeout(1500)  
                    .setSocketTimeout(socketTimeout).build();  
            httpPost.setConfig(requestConfig);
            httpPost.setHeader("Content-Type", "application/json");
            // 构建请求参数
            BufferedReader br = null;
            try {
            if(null!=jsonparams&&jsonparams.length()>0){
                    StringEntity entity = new StringEntity(jsonparams,"utf-8");
                    httpPost.setEntity(entity);
            }
           
             CloseableHttpResponse response = httpclient.execute(httpPost);
    
            // 读取服务器响应数据
            resultBuffer = new StringBuffer();
            if(null!=response.getEntity()){
                br = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "utf-8"));
                String temp;
                while ((temp = br.readLine()) != null) {
                    resultBuffer.append(temp);
                }    
            }
            } catch (RuntimeException e) {
                log.error("网络链接出现异常,请检查...",e);
                throw new RuntimeException(e);
            } catch (ConnectException e) {
                log.error("客户端网络无法链接,请检查...",e);
                throw new ConnectException();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        br = null;
                        throw new RuntimeException(e);
                    }
                }
            }        
            return resultBuffer.toString();
        }
        /**
         * 方式一:HttpClient解决以post方式,用json传输x-www-form-urlencoded数据
         */
        public  static  String doPostJson(String url,String key,String json){
            try {
                String postURL=url;
                PostMethod postMethod = null;
                postMethod = new PostMethod(postURL) ;
                postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8") ;
                postMethod.addParameter(key,json);  //传参数
                HttpClient httpClient = new HttpClient();
                int response = httpClient.executeMethod(postMethod); // 执行POST方法
                String result = postMethod.getResponseBodyAsString() ;
                return result;
            } catch (Exception e) {
    
                throw new RuntimeException(e.getMessage());
            }
        }
    
        /**
         * 方式二:HttpClient解决以post方式,用json传输x-www-form-urlencoded数据
         */
        public static String doPost(String url, Map<String, Object> paramMap) {
            CloseableHttpClient httpClient = null;
            CloseableHttpResponse httpResponse = null;
            String result = "";
            // 创建httpClient实例
            httpClient = HttpClients.createDefault();
            // 创建httpPost远程连接实例
            HttpPost httpPost = new HttpPost(url);
            // 配置请求参数实例
            RequestConfig requestConfig =
                    RequestConfig.custom()
                            .setConnectTimeout(35000) // 设置连接主机服务超时时间
                            .setConnectionRequestTimeout(35000) // 设置连接请求超时时间
                            .setSocketTimeout(60000) // 设置读取数据连接超时时间
                            .build();
            // 为httpPost实例设置配置
            httpPost.setConfig(requestConfig);
            // 设置请求头
            httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
            // 封装post请求参数
            if (null != paramMap && paramMap.size() > 0) {
                List<NameValuePair> nvps = new ArrayList<NameValuePair>();
                // 通过map集成entrySet方法获取entity
                Set<Entry<String, Object>> entrySet = paramMap.entrySet();
                // 循环遍历,获取迭代器
                Iterator<Entry<String, Object>> iterator = entrySet.iterator();
                while (iterator.hasNext()) {
                    Map.Entry<String, Object> mapEntry = iterator.next();
                    nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString()));
                }
    
                // 为httpPost设置封装好的请求参数
                try {
                    httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            }
            try {
                // httpClient对象执行post请求,并返回响应参数对象
                httpResponse = httpClient.execute(httpPost);
                // 从响应对象中获取响应内容
                HttpEntity entity = httpResponse.getEntity();
                result = EntityUtils.toString(entity);
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // 关闭资源
                if (null != httpResponse) {
                    try {
                        httpResponse.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != httpClient) {
                    try {
                        httpClient.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return result;
        }
    
    
    
        /**
         * 使用HttpClient以JSON格式发送get请求
         * @param urlParam
         * @param params
         * @param socketTimeout
         * @return
         * @throws NoSuchAlgorithmException
         * @throws KeyManagementException
         * @throws NoHttpResponseException
         */
        public static String httpClientGet(String urlParam, Map<String, Object> params,Integer socketTimeout) throws NoSuchAlgorithmException, KeyManagementException,NoHttpResponseException {
            StringBuffer resultBuffer = null;
            CloseableHttpClient httpclient=HttpClients.createDefault();
            BufferedReader br = null;
            // 构建请求参数
            StringBuffer sbParams = new StringBuffer();
            if (params != null && params.size() > 0) {
                for (Entry<String, Object> entry : params.entrySet()) {
                    sbParams.append(entry.getKey());
                    sbParams.append("=");
                    try {
                        sbParams.append(URLEncoder.encode(String.valueOf(entry.getValue()), "utf-8"));
                    } catch (UnsupportedEncodingException e) {
                        throw new RuntimeException(e);
                    }
                    sbParams.append("&");
                }
            }
            if (sbParams != null && sbParams.length() > 0) {
                urlParam = urlParam + "?" + sbParams.substring(0, sbParams.length() - 1);
            }
            HttpGet httpGet = new HttpGet(urlParam);
            RequestConfig requestConfig = RequestConfig.custom()  
                    .setConnectTimeout(3000).setConnectionRequestTimeout(1500)  
                    .setSocketTimeout(socketTimeout).build(); 
            httpGet.setConfig(requestConfig);
            try {
                CloseableHttpResponse response = httpclient.execute(httpGet);
                
                // 读取服务器响应数据
                br = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "utf-8"));
                String temp;
                resultBuffer = new StringBuffer();
                while ((temp = br.readLine()) != null) {
                    resultBuffer.append(temp);
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        br = null;
                        throw new RuntimeException(e);
                    }
                }
            }
            return resultBuffer.toString();
        }
        
    
        /**
         * 上传文件
         * @param urlParam
         * @param loadpath
         * @param file
         * @return
         * @throws NoSuchAlgorithmException
         * @throws KeyManagementException
         * @throws HttpHostConnectException
         * @author Seagull
         * @date 2019年3月15日
         */
        public static String httpClientUploadFile(String urlParam, String loadpath, File file) throws NoSuchAlgorithmException, KeyManagementException, HttpHostConnectException {
            StringBuffer resultBuffer = null;
            CloseableHttpClient httpclient=HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(urlParam);
            // 构建请求参数
            BufferedReader br = null;
            try {
                MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
                //设置请求的编码格式  
                entityBuilder.setCharset(Charset.forName("utf-8"));
                entityBuilder.addBinaryBody("jarfile", file);
                entityBuilder.addTextBody("loadpath", loadpath);
                HttpEntity reqEntity =entityBuilder.build();
                httpPost.setEntity(reqEntity);
                
                CloseableHttpResponse response = httpclient.execute(httpPost);
                 //从状态行中获取状态码  
                 String responsecode = String.valueOf(response.getStatusLine().getStatusCode());
                // 读取服务器响应数据
                resultBuffer = new StringBuffer();
    
                br = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "utf-8"));
                String temp;
                while ((temp = br.readLine()) != null) {
                    resultBuffer.append(temp);
                }
                if(resultBuffer.length()==0){
                    resultBuffer.append("上传文件异常,响应码:"+responsecode);
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        br = null;
                        throw new RuntimeException(e);
                    }
                }
            }
            return resultBuffer.toString();
        }
    
        /**
         * httpclicent 发送form-data请求,没有上传文件
         * @param urlParam  请求url
         * @param requestParams 请求参数
         * @return
         * @throws NoSuchAlgorithmException
         * @throws KeyManagementException
         * @throws HttpHostConnectException
         */
        public static String httpClientUploadPost(String urlParam, Map<String,Object> requestParams) throws NoSuchAlgorithmException, KeyManagementException, HttpHostConnectException
        {
            StringBuffer resultBuffer = null;
            CloseableHttpClient httpclient=HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(urlParam);
            // 构建请求参数
            BufferedReader br = null;
            try {
                MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
                //设置请求的编码格式
                entityBuilder.setCharset(Charset.forName("utf-8"));
    //        entityBuilder.addBinaryBody("jarfile", file);
                if (requestParams!=null&&requestParams.size()>0){
                    for (Map.Entry<String, Object> entry: requestParams.entrySet()) {
                        entityBuilder.addTextBody(entry.getKey(), (String) entry.getValue());
                    }
                }
                HttpEntity reqEntity =entityBuilder.build();
                httpPost.setEntity(reqEntity);
    
                CloseableHttpResponse response = httpclient.execute(httpPost);
                //从状态行中获取状态码
                String responsecode = String.valueOf(response.getStatusLine().getStatusCode());
                // 读取服务器响应数据
                resultBuffer = new StringBuffer();
    
                br = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "utf-8"));
                String temp;
                while ((temp = br.readLine()) != null) {
                    resultBuffer.append(temp);
                }
                if(resultBuffer.length()==0){
                    resultBuffer.append("上传文件异常,响应码:"+responsecode);
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        br = null;
                        throw new RuntimeException(e);
                    }
                }
            }
            return resultBuffer.toString();
        }
    
        /**
         * 获取文件流
         * @param urlParam
         * @param params
         * @return
         * @throws IOException
         * @throws HttpHostConnectException
         * @author Seagull
         * @date 2019年3月15日
         */
        public static byte[] getFile(String urlParam, Map<String, Object> params) throws IOException, HttpHostConnectException{
            // 构建请求参数
            StringBuffer sbParams = new StringBuffer();
            if (params != null && params.size() > 0) {
                for (Entry<String, Object> entry : params.entrySet()) {
                    sbParams.append(entry.getKey());
                    sbParams.append("=");
                    try {
                        sbParams.append(URLEncoder.encode(String.valueOf(entry.getValue()), "utf-8"));
                    } catch (UnsupportedEncodingException e) {
                        throw new RuntimeException(e);
                    }
                    sbParams.append("&");
                }
            }
            if (sbParams != null && sbParams.length() > 0) {
                urlParam = urlParam + "?" + sbParams.substring(0, sbParams.length() - 1);
            }
            URL urlConet = new URL(urlParam);
            HttpURLConnection con = (HttpURLConnection)urlConet.openConnection();    
            con.setRequestMethod("GET");    
            con.setConnectTimeout(4 * 1000);    
            InputStream inStream = con .getInputStream();    //通过输入流获取图片数据    
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();    
            byte[] buffer = new byte[2048];    
            int len = 0;    
            while( (len=inStream.read(buffer)) != -1 ){    
                outStream.write(buffer, 0, len);    
            }    
            inStream.close();
            byte[] data =  outStream.toByteArray(); 
            return data;
        }
    
    }

    测试代码:

    public class TestHttp {
      public static void main(String[] args) {
        String url="https://xxxxxxxxx";
        String json ="xxxxx";
    String body
    = HttpRequest.doPostJson(url, "body", json); Map<String, Object> map = new HashMap<>(); map.put("body", json); String doPost = HttpRequest.doPost(url, map); System.out.println("这是第一种方式:"+body); System.out.println("这是第二种方式:"+doPost); } }
  • 相关阅读:
    ZooKeeper简介
    Kylin简介
    MVC之Ajax
    mvc扩展HtmlHelper功能
    history.js 一个无刷新就可改变浏览器栏地址的插件(不依赖jquery)
    在ASP.NET MVC中,使用Bundle来打包压缩js和css
    OAuth的MVC实现(微软)
    自定义Exception:MVC抛出自定义异常,并以Json方式返回
    Ubuntu 下常用命令
    科技界、IT届的外号
  • 原文地址:https://www.cnblogs.com/appium/p/14139576.html
Copyright © 2020-2023  润新知