美文网首页spring boot 相关
分享一个自用的Http客户端

分享一个自用的Http客户端

作者: 帷幕丶归心 | 来源:发表于2021-06-07 14:34 被阅读0次

准备工作

  <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
  </dependency>
  <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
  </dependency>

创建HttpUtils.java

public class HttpUtils {
    private final static Logger logger = LoggerFactory.getLogger("-----HttpUtils-----");
    private final static int RESULT_OK = 200;
    private Map<String, String> headers;
    private CloseableHttpClient client;

    private HttpUtils() {
    }

    public static HttpUtils create() {
        return new HttpUtils();
    }

    public HttpUtils client(CloseableHttpClient client) {
        this.client = client;
        return this;
    }

    public HttpUtils headers(Map<String, String> headers) {
        this.headers = headers;
        return this;
    }

    public String get(String url) {
        try {
            return getResult(url);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String getDownLoad(String url, String dir, String name) {
        try {
            return downLoadFile(url, dir, name);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String post(String url, Map<String, Object> param) {
        HttpEntity entity = new UrlEncodedFormEntity(createParam(param), Consts.UTF_8);
        try {
            return postResult(url, entity);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String post(String url, String param) {
        HttpEntity entity = new StringEntity(param, Consts.UTF_8);
        try {
            return postResult(url, entity);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String postDownLoad(String url, String param, String dir, String name) {
        HttpEntity entity = new StringEntity(param, Consts.UTF_8);
        try {
            return downLoadFile(url, entity, dir, name);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public RequestConfig config() {
        // 配置信息
        return RequestConfig.custom()
                // 设置连接超时时间(单位毫秒)
                .setConnectTimeout(5000)
                // 设置请求超时时间(单位毫秒)
                .setConnectionRequestTimeout(5000)
                // socket读写超时时间(单位毫秒)
                .setSocketTimeout(5000)
                // 设置是否允许重定向(默认为true)
                .setRedirectsEnabled(true).build();

    }

    private String postResult(String url, HttpEntity entity) throws Exception {
        HttpPost post = new HttpPost(url);
        if (null != headers && !headers.isEmpty()) {
            headers.forEach(post::addHeader);
        }
        CloseableHttpClient httpClient = null != client ? client : HttpClientBuilder.create().build();
        post.setConfig(config());
        post.setEntity(entity);
        return getResultString(httpClient.execute(post));
    }

    private String getResult(String url) throws Exception {
        CloseableHttpClient httpClient = null != client ? client : HttpClientBuilder.create().build();
        HttpGet get = new HttpGet(url);
        if (null != headers && !headers.isEmpty()) {
            headers.forEach(get::addHeader);
        }
        get.setConfig(config());
        return getResultString(httpClient.execute(get));

    }

    private String downLoadFile(String url, HttpEntity entity, String dir, String name) throws Exception {
        CloseableHttpClient httpClient = null != client ? client : HttpClientBuilder.create().build();
        HttpPost post = new HttpPost(url);
        if (null != headers && !headers.isEmpty()) {
            headers.forEach(post::addHeader);
        }
        post.setConfig(config());
        post.setEntity(entity);
        return download(httpClient.execute(post), dir, name);

    }

    private String downLoadFile(String url, String dir, String name) throws Exception {
        CloseableHttpClient httpClient = null != client ? client : HttpClientBuilder.create().build();
        HttpGet get = new HttpGet(url);
        if (null != headers && !headers.isEmpty()) {
            headers.forEach(get::addHeader);
        }
        get.setConfig(config());
        return download(httpClient.execute(get), dir, name);

    }

    private String getResultString(CloseableHttpResponse execute) throws IOException {
        try (CloseableHttpResponse response = execute) {
            HttpEntity httpEntity = response.getEntity();
            int code = response.getStatusLine().getStatusCode();
            String result = EntityUtils.toString(httpEntity, StandardCharsets.UTF_8);
            logger.debug(result);
            if (RESULT_OK == code) {
                return result;
            } else {
                return null;
            }
        }
    }

    private String download(CloseableHttpResponse execute, String dir, String name) throws IOException {
        try (CloseableHttpResponse response = execute) {
            HttpEntity httpEntity = response.getEntity();
            File dirs = new File(dir);
            if (!dirs.exists()) {
                dirs.mkdirs();
            }
            File file = new File(dirs.getAbsolutePath(), name);
            FileUtils.copyInputStreamToFile(httpEntity.getContent(), file);
            return dirs.getAbsolutePath() + "/" + name;
        }
    }

    private static List<NameValuePair> createParam(Map<String, Object> param) {
        //建立一个NameValuePair数组,用于存储欲传送的参数
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        if (param != null) {
            for (String k : param.keySet()) {
                logger.debug(k + ":" + param.get(k).toString());
                nvps.add(new BasicNameValuePair(k, param.get(k).toString()));
            }
        }
        return nvps;
    }

    public static void main(String[] args) {
        String url = WxUtils.ACCESS_TOKEN;
        url = url.replace("APPID", "xxxxxxxxxxxxxxx");
        url = url.replace("APPSECRET", "xxxxxxxxxx");
        String ret = HttpUtils.create().get(url);
        System.out.println(ret);
    }
}

调用结果

获取微信AccessToken
{"access_token":"xx_xXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","expires_in":7200}

相关文章

  • 分享一个自用的Http客户端

    准备工作 创建HttpUtils.java 调用结果

  • Feign 官方文档翻译

    Feign 让编写java http客户端变简单 Fegin是一个java调用HTTP的客户端binder,其灵感...

  • Android网络安全配置

    基础概念 HTTP HTTP协议工作于 客户端-服务端架构上。通常,由HTTP客户端发起一个请求,建立一个到服务器...

  • Android网络安全配置

    基础概念 HTTP HTTP协议工作于 客户端-服务端架构上。通常,由HTTP客户端发起一个请求,建立一个到服务器...

  • HTTP_缓存_Cookie _Session

    HTTP 的工作原理是什么? 以下是HTTP请求/响应的步骤: 客户端连接到Web服务器一个HTTP客户端,通常是...

  • RESTful API

    HTTP HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通常,由HTTP客户端发起...

  • HTTP请求

    客户端HTTP请求 URL只是标识资源的位置,而HTTP是用来提交和获取资源。客户端发送一个HTTP请求到服务器的...

  • 素美云创分享

    自用省钱 分享即挣

  • HTTP的跨域--CORS

    http的客户端 最简单的http的客户端就是我们的浏览器,只要实现了发送一个http的请求的报文的工具,那么这就...

  • HTTP简介

    1. HTTP是什么? HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准,通常,由HTTP客户端...

网友评论

    本文标题:分享一个自用的Http客户端

    本文链接:https://www.haomeiwen.com/subject/cdjosltx.html