Httpclient工具类

一、引入依赖包
     <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
        </dependency>     
     <dependency>       
      <groupId>com.alibaba</groupId>       
      <artifactId>fastjson</artifactId>       
      <version>1.2.62</version>     
        </dependency>

 二、工具类 

package com.sskd.drm.utils;

import java.util.*;

import com.alibaba.fastjson.JSON;
import org.apache.http.*;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;

import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.ssl.SSLContexts;
import javax.net.ssl.SSLContext;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import java.io.*;
import java.io.File;

/**
 * @name HttpClientUtils
 * @Description Httpclient工具类
 * @author Mr.bai
 * @time  2020/5/15 13:06
 * @version 1.0
 */
public class HttpClientUtils {

    /**
     * get请求
     * @param url url地址
     * @param parameters 参数map集
     * @param headers header集
     * @return
     */
    public static String getrequest(String url,Map<String, String> parameters,Map<String,String> headers){
        String basicUrl=url;
        String result=null;
        CloseableHttpClient httpclient=getignoreSSLClient();
        List<NameValuePair> formData=new ArrayList<>();
        try {
            //参数分离
            if(!url.contains("=")) {
                if(parameters !=null && parameters.size()>0) {
                    for(Map.Entry<String,String> entry:parameters.entrySet()) {
                        String k =entry.getKey();
                        String v=entry.getValue();
                        formData.add(new BasicNameValuePair(k, v));
                    }
                }
                String urlencoded =EntityUtils.toString(new UrlEncodedFormEntity(formData, Consts.UTF_8));
                if(basicUrl.contains("?")) {
                    basicUrl += urlencoded;
                }else {
                    basicUrl+= "?"+urlencoded;
                }
            }
            //纯url
            HttpGet get=new HttpGet(basicUrl);
            if(headers !=null && headers.size()>0) {
                for(Map.Entry<String, String> entry:headers.entrySet()) {
                    get.setHeader(entry.getKey(),entry.getValue());
                }
            }else {
                get.setHeader(null);
            }
            HttpResponse response=httpclient.execute(get);
            return getResult(response);
        }catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(httpclient!=null) {
                    httpclient.close();
                }
            }catch(IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * post(application/form-data)请求
     * @param url url地址
     * @param body 参数集 如果参数内需要传输文件,传File
     * @param headers header配置
     * @return
     */
    public static String postformData(String url,Map<String, Object> body,Map<String, String> headers){
        CloseableHttpClient httpclient = getignoreSSLClient();
        try {
            HttpPost post =new HttpPost(url);
            //请求表单参数
            MultipartEntityBuilder reqEntity = MultipartEntityBuilder.create();
            if (body != null && body.size() > 0){
                for (String key : body.keySet()) {
                    if (body.get(key) instanceof File){
                        File file = (File) body.get(key);
                        FileBody fileBody = new FileBody(file);
                        reqEntity.addPart(key, fileBody);
                    }else {
                        reqEntity.addTextBody(key, body.get(key).toString(),ContentType.TEXT_PLAIN);
                    }
                }
                System.out.println("post(application/form-data)请求,构造参数完毕!");
            }
            post.setEntity(reqEntity.build());
            //设置header
            if(headers !=null && headers.size()>0) {
                for (String key : headers.keySet()) {
                    post.setHeader(key,headers.get(key));
                }
            }else {
                post.setHeader(null);
            }
            HttpResponse response = httpclient.execute(post);
            return getResult(response);
        }catch(Exception e ) {
            System.err.println("请求出错\n错误信息:" +e.getMessage());
        }finally {
            try {
                if(httpclient!=null) {
                    httpclient.close();
                }
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * post(application/json)
     * @param url url地址
     * @param body 参数集
     * @param headers header配置
     * @return
     */
    public static String postJsonrequest(String url , Map<Object, Object> body , Map<Object, Object> headers){
        HttpPost post =new HttpPost(url);
        CloseableHttpClient httpclient=getignoreSSLClient();
        try {
            if(headers !=null && headers.size()>0) {
                for(Map.Entry<Object, Object> entry:headers.entrySet()) {
                    post.setHeader(entry.getKey().toString(),entry.getValue().toString());
                }
            }else {
                post.setHeader("Content-Type","application/json;charset=UTF-8");
                //header设置完毕
            }
            //body转string,处理entity传入httpEntity
            StringEntity newEntity=new StringEntity(JSON.toJSONString(body),"utf-8");
            post.setEntity(newEntity);;
            HttpResponse response=httpclient.execute(post);
            return getResult(response);
        }catch (Exception e) {
            System.err.println("请求出错\n错误信息:" +e.getMessage());
        }finally {
            try {
                if(httpclient!=null) {
                    httpclient.close();
                }

            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 下载文件
     * @param url 下载文件地址
     * @param localfileName 本地储存路径,
     * @param remotefileName 服务器资源路径
     */
    public static void downloadfile(String url,String localfileName,String remotefileName) {
        FileOutputStream output = null;
        InputStream in = null;
        CloseableHttpClient httpclient=getignoreSSLClient();
        try {
            HttpGet get=new HttpGet(url);
            get.addHeader("fileName",remotefileName );
            HttpResponse response=httpclient.execute(get);
            HttpEntity entity =response.getEntity();
            in = entity.getContent();
            long length = entity.getContentLength();
            if (length <= 0) {
                return;
            }
            File localfile = new File(localfileName);

            if(! localfile.exists()) {
                localfile.createNewFile();
            }
            output=new FileOutputStream(localfile);
            byte[] buffer = new byte[4096];
            int readLength = 0;
            while ((readLength=in.read(buffer)) > 0) {
                byte[] bytes = new byte[readLength];
                System.arraycopy(buffer, 0, bytes, 0, readLength);
                output.write(bytes);
            }
            output.flush();
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(in !=null) {
                    in.close();
                }
                if(output !=null) {
                    output.close();
                }
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 上传文件
     * @param localfilepath 文件路径
     * @param url 上传文件的url
     */
    public static String uploadfile(String localfilepath,String url) {
        CloseableHttpClient httpclient=getignoreSSLClient();
        try {
            HttpPost post = new HttpPost(url);
            FileBody bin=new FileBody(new File(localfilepath));
            HttpEntity entity = MultipartEntityBuilder.create().addPart("audioData",bin).build();
            post.setEntity(entity);
            HttpResponse response=httpclient.execute(post);
            return getResult(response);
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(httpclient!=null ) {
                    httpclient.close();
                }
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * ssl安全跳过
     * @return
     */
    private static CloseableHttpClient getignoreSSLClient() {
        CloseableHttpClient client =null;
        try {
            SSLContext sslContext=SSLContexts.custom().loadTrustMaterial(null, (x509Certificates, s) -> true).build();
            client=HttpClients.custom().setSSLContext(sslContext).setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
        }catch(Exception e) {
            System.err.println("配置跳过ssl证书出错:" + e.getMessage());
        }
        return client;
    }

    private static String getResult(HttpResponse response) throws IOException {
        HttpEntity entity=response.getEntity();
        int errorCode= response.getStatusLine().getStatusCode();
        if (HttpStatus.SC_OK==errorCode){
            if (entity != null){
                String result =EntityUtils.toString(entity,"utf-8");
                //关闭entity
                EntityUtils.consume(entity);
                return result;
            }
        }
        System.err.println("请求出错\n状态码:"+errorCode+"\n错误信息"+EntityUtils.toString(entity,"utf-8"));
        return null;
    }
}
  

  

posted on 2022-03-11 16:09  书梦一生  阅读(112)  评论(0编辑  收藏  举报

导航