「HttpClient」在 SpringBoot 中使用 HttpClient 实现 HTTP 请求

越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。

HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

新建一个 SpringBoot 工程,引入 httpclient 的 POM 依赖:

<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.6</version>
</dependency>

详细使用示例

GET 无参

调用接口:

http://localhost:8080/http/listUsers

没有入参。

HttpClientController#doGetNoParams() :GET请求接口不带参数

@RestController
@RequestMapping("/httpClient")
public class HttpClientController {
 

    @Autowired
    private HttpClientService httpClientService;

    // GET请求接口不带参数
    @GetMapping("/doGetNoParams")
    public String doGetNoParams() {
 
        return httpClientService.doGetNoParams();
    }

}

HttpClientServiceImpl#doGetNoParams() :GET 请求接口不带参数

@Slf4j
@Service
public class HttpClientServiceImpl implements HttpClientService {
 

    // GET请求接口不带参数
    @Override
    public String doGetNoParams() {
 
        String result = HttpClientUtil.doGetNoParams();
        log.info("【发送GET请求】返回结果为:{}", result);
        if (!StringUtil.isBlank(result)) {
 
            TaskCenterUtil taskCenterUtil = TaskCenterUtil.getTaskCenterUtil();
            taskCenterUtil.submitTask(() -> {
 
                log.info("【子线程】开启了一个新线程,当前线程名为:{}", Thread.currentThread().getName());
                return null;
            });
        }
        log.info("【主线程】当前线程名为:{}", Thread.currentThread().getName());
        return result;
    }

}

说明:

  1. 当 HTTP 调用成功后,通过线程池开一个子线程,去异步执行任务;主线程继续向下执行

HttpClientUtil#doGetNoParams() :GET请求接口不带参数

@Slf4j
public class HttpClientUtil {
 

    // 服务器ip
    public static final String IP = "http://localhost";

    // 端口
    public static final String PORT = ":8080";

    // GET请求接口不带参数
    public static final String GET_URL_NO_PARAMS = IP + PORT + "/http/listUsers";

    // GET请求接口不带参数
    public static String doGetNoParams() {
 
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        // 创建 GET 请求
        HttpGet httpGet = new HttpGet(GET_URL_NO_PARAMS);
        httpGet.setHeader("Accept-Encoding", "identity");
        log.info("【发送GET请求】请求地址为:{}", GET_URL_NO_PARAMS);
        CloseableHttpResponse httpResponse = null;
        try {
 
            httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            log.info("【发送GET请求】成功,相应状态为:{}", httpResponse.getStatusLine());
            if (HttpStatus.SC_OK == httpResponse.getStatusLine().getStatusCode() && null != httpEntity) {
 
                String result = EntityUtils.toString(httpEntity);
                log.info("【发送GET请求】成功,响应内容为:{}", result);
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值