DarkTime
  • README
  • SpringBoot
    • spring boot 运维
    • Spring Boot 部署war包
    • springboot搭建
    • spring boot 读取配置文件
    • 简单总结
    • spring配置文件
    • spring boot Configuration
    • spring boot 配置文件
    • spring boot 配置mybatis
  • MacAwesome
    • markdown使用
    • MAC APP Awesome
    • [markdown使用](/MacAwesome/SUMMARY.md)
    • chrome
    • intellij idea
    • MacAwesome
    • VS Code 的使用
    • MAC Shell命令
  • database
    • druid使用
  • 框架
    • 项目拆析
    • 各种框架和工具
  • docker
    • kubernetes
    • docker
    • docker 常用镜像
  • 效率工具
    • 解决dns污染导致域名解析失败
    • sonarqube 相关配置
    • Iterm2 使用
    • gitbook
    • github awesome github资源推荐
    • playground 在线试用平台汇总
    • linux中的office
    • linux screen 工具
    • 简单Mock服务(moco)
    • npm
    • Visual Studio Code 的使用
    • 配置开发环境
    • homebrew的使用
    • 汇总
  • tomcat
    • tomcat目录规范
  • code_snippets
  • 专题
    • RESTful API
    • serveless服务
    • 搭建私有云主机 折腾记
    • 开发中的各种疑难杂症问题
    • spring 最佳实践
    • LLM 大语言模型
    • notelive
      • 文章框架
      • notelive vue版本开发
      • notelive 开发 札记
    • webrtc技术分析
    • 反向代理
    • spring-cloud
      • spring boot admin 监控服务
      • Spring Cloud 整理汇总
  • python
    • python 学习
    • Python 修饰器的一些小细节
  • 云主机
    • aliyun 主机的种种
  • maven
    • maven使用
    • maven项目增加编译版本号 buildnumber-maven-plugin
    • 仓库
  • java
    • java 开发常用工具类
    • java
    • apache commons pool 对象连接池
  • 大数据
    • kafka
    • gobblin
    • sqoop 简介及使用
    • hbase
    • gobblin
    • sqoop源码解析
    • hadoop map reduce
    • 大数据 学习札记
  • 脚本
    • python
      • 批量请求url 解析json数据
    • js
      • sheetjs-js读取excel
    • shell
      • 自动生成bitbook的summary文件
      • linux/mac 实用脚本
      • 自动创建tomcat项目脚本
      • 批量处理文件内容脚本
  • nginx
    • nginx
    • ngix 文件浏览器 文件服务器
  • linux
    • 群晖nas札记
    • ftp
    • linux 运维
    • 常用命令
    • linux
    • mysqldump脚本
    • 代理
    • 简易灰度部署脚本 不使用jenkins的纯shell方式
    • shell脚本
    • 附加文档
  • mysql
    • sql
  • 游戏开发
    • Unity 2020 学习笔记
  • 学习笔记
    • centos常用环境安装
    • gradle 学习
    • 建站经历
    • python
      • 爬虫教程
    • 如何解决百度爬虫无法爬取搭建在Github上的个人博客的问题? - 知乎
    • baas
      • 在本地部署Parse Server
    • mysql学习标记
    • java code snippets
    • 非Spring Boot Web项目 注册节点到Eureka Server并提供服务
    • kotlin
      • Kotlin 学习札记
    • spring cloud
    • vim配置
    • 前端
      • 开发PWA应用
  • jenkins
    • jenkins配置备份
    • gitlab触发Jenkins 自动构建
    • 安装与使用
  • npm
    • npm 使用
  • git
    • ignore
    • git使用总结
    • git配置多个远程仓库
  • 前端
    • swig
    • 解决跨域请求问题
    • angularjs 学习
    • scriptbot的前端开发经验总结
    • 各种资源
    • 一些有用的js代码
Powered by GitBook
On this page

Was this helpful?

  1. java

java 开发常用工具类

PreviousjavaNextjava

Last updated 6 years ago

Was this helpful?

http请求

org.apache.http.client.HttpClient httpclient 4.x版

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>
package datacenter.plugins.el.utils;


import datacenter.plugins.el.common.PluginException;
import org.apache.commons.collections4.MapUtils;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;

/**
 * http请求工具
 *
 * @author Rizon
 * @date 2018/9/12
 */

public class HttpUtils {
    private final static Logger log = Logger.getLogger(HttpUtils.class);

    private final static int CONNECT_TIMEOUT;
    private final static int SOCKET_TIMEOUT;
    private final static HttpClient HTTP_CLIENT;

    static {
        CONNECT_TIMEOUT = Integer.valueOf(ConfigUtil.getOrDefaultValue("http.connect-timeout", "3000"));
        SOCKET_TIMEOUT = Integer.valueOf(ConfigUtil.getOrDefaultValue("http.socket-timeout", "6000"));

        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        httpClientBuilder.setRetryHandler(
                new DefaultHttpRequestRetryHandler(3, true));
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(SOCKET_TIMEOUT)
                .setSocketTimeout(CONNECT_TIMEOUT)
                .build();
        httpClientBuilder.setDefaultRequestConfig(requestConfig);
        HTTP_CLIENT = httpClientBuilder.build();
    }

    public static String get(String url, List<NameValuePair> para) {
        URI uri;
        try {
            uri = new URIBuilder(url)
                    .addParameters(para)
                    .build();
        } catch (URISyntaxException e) {
            log.error("URISyntaxException", e);
            throw new PluginException("URISyntaxException", e);
        }
        return get(uri);
    }

    public static String get(String url, Map<String, String> para) {
        URI uri;
        try {
            URIBuilder uriBuilder = new URIBuilder(url);
            MapUtils.emptyIfNull(para).forEach(uriBuilder::addParameter);
            uri = uriBuilder.build();
        } catch (URISyntaxException e) {
            log.error("URISyntaxException", e);
            throw new PluginException("URISyntaxException", e);
        }
        return get(uri);
    }

    public static String get(URI uri) {
        log.info("http get: " + uri);
        try {
            HttpResponse response = HTTP_CLIENT.execute(new HttpGet(uri));
            if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
                System.out.println(response.getStatusLine().getStatusCode());
                return EntityUtils.toString(response.getEntity());
            } else {
                log.error("http status code!=200");
                throw new PluginException("http status code!=200");
            }
        } catch (IOException e) {
            log.error("http request IOException", e);
            throw new PluginException("http request IOException", e);
        }

    }
}

org.springframework.web.client.RestTemplate spring的好用的htto请求工具,但是包含在spring-web中,不适合单独使用

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>

org.apache.commons.httpclient.HttpClient apache的http工具3.x版,封装的不是很好,使用过于繁琐

<dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
java实现HTTP请求的三种方式
利用HttpClient4,实现get,post 参数,post json,post file - CSDN博客