当前位置: 首页 > article >正文

如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求

Apache HttpClient 是一个功能强大且灵活的库,用于在Java中处理HTTP请求。

它支持多种HTTP方法,包括GET、POST、PUT和DELETE等。

本教程将演示如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求。

Maven依赖

要使用Apache HttpClient,您需要在pom.xml文件中添加以下依赖项:

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5 -->
<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.3</version>
</dependency>

示例场景

我们将创建简单的Java类,这些类将向指定的URL发送GET、POST、PUT和DELETE请求,并打印响应。

JSONPlaceholder API

为了演示目的,我们将使用JSONPlaceholder API,该API提供了一个虚拟的在线RESTful端点,用于测试和原型设计。

GET请求

发送GET请求的Java类

创建一个名为HttpClientGetExample的类,代码如下:

import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.classic.methods.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.io.entity.EntityUtils;

public class HttpClientGetExample {

    public static void main(String[] args) {
        String url = "https://jsonplaceholder.typicode.com/posts/1";
        
        // 创建HttpClient
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            
            // 创建HttpGet请求
            HttpGet request = new HttpGet(url);
            
            // 执行请求
            try (CloseableHttpResponse response = httpClient.execute(request)) {
                
                // 获取HTTP响应状态
                System.out.println("Response Code: " + response.getCode());
                
                // 获取HTTP响应内容
                String content = EntityUtils.toString(response.getEntity());
                System.out.println("Response Content: \n" + content);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
示例输出
Response Code: 200
Response Content: 
{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

POST请求

发送POST请求的Java类

创建一个名为HttpClientPostExample的类,代码如下:

import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.classic.methods.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.io.entity.StringEntity;
import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.io.entity.EntityUtils;

public class HttpClientPostExample {

    public static void main(String[] args) {
        String url = "https://jsonplaceholder.typicode.com/posts";
        String json = "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}";

        // 创建HttpClient
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            
            // 创建HttpPost请求
            HttpPost request = new HttpPost(url);
            
            // 设置JSON负载
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            request.setEntity(entity);
            
            // 设置头部
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");
            
            // 执行请求
            try (CloseableHttpResponse response = httpClient.execute(request)) {
                
                // 获取HTTP响应状态
                System.out.println("Response Code: " + response.getCode());
                
                // 获取HTTP响应内容
                String content = EntityUtils.toString(response.getEntity());
                System.out.println("Response Content: \n" + content);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
示例输出
Response Code: 201
Response Content: 
{
  "title": "foo",
  "body": "bar",
  "userId": 1,
  "id": 101
}

PUT请求

发送PUT请求的Java类

创建一个名为HttpClientPutExample的类,代码如下:

import org.apache.hc.client5.http.classic.methods.HttpPut;
import org.apache.hc.client5.http.classic.methods.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.io.entity.StringEntity;
import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.io.entity.EntityUtils;

public class HttpClientPutExample {

    public static void main(String[] args) {
        String url = "https://jsonplaceholder.typicode.com/posts/1";
        String json = "{\"id\":1,\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}";

        // 创建HttpClient
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            
            // 创建HttpPut请求
            HttpPut request = new HttpPut(url);
            
            // 设置JSON负载
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            request.setEntity(entity);
            
            // 设置头部
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");
            
            // 执行请求
            try (CloseableHttpResponse response = httpClient.execute(request)) {
                
                // 获取HTTP响应状态
                System.out.println("Response Code: " + response.getCode());
                
                // 获取HTTP响应内容
                String content = EntityUtils.toString(response.getEntity());
                System.out.println("Response Content: \n" + content);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
示例输出
Response Code: 200
Response Content: 
{
  "id": 1,
  "title": "foo",
  "body": "bar",
  "userId": 1
}

DELETE请求

发送DELETE请求的Java类

创建一个名为HttpClientDeleteExample的类,代码如下:

import org.apache.hc.client5.http.classic.methods.HttpDelete;
import org.apache.hc.client5.http.classic.methods.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.io.entity.EntityUtils;

public class HttpClientDeleteExample {

    public static void main(String[] args) {
        String url = "https://jsonplaceholder.typicode.com/posts/1";

        // 创建HttpClient
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            
            // 创建HttpDelete请求
            HttpDelete request = new HttpDelete(url);
            
            // 执行请求
            try (CloseableHttpResponse response = httpClient.execute(request)) {
                
                // 获取HTTP响应状态
                System.out.println("Response Code: " + response.getCode());
                
                // 获取HTTP响应内容
                String content = EntityUtils.toString(response.getEntity());
                System.out.println("Response Content: \n" + content);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
示例输出
Response Code: 200
Response Content: 
{}

额外配置

  • 设置自定义头部:可以通过调用请求对象(如HttpGet、HttpPost、HttpPut、HttpDelete)上的setHeader方法来设置自定义头部。
  • 处理重定向:默认情况下,Apache HttpClient会自动处理重定向。您可以使用自定义的HttpClientBuilder来自定义这种行为。
  • 设置超时:可以使用RequestConfig来设置连接和套接字超时。

结论

使用Apache HttpClient来执行GET、POST、PUT和DELETE HTTP请求非常方便。

通过遵循本教程,您现在应该能够创建并执行这些类型的请求,处理响应,并定制HTTP请求和响应过程。

Apache HttpClient提供了一整套功能,使其成为处理Java应用程序中HTTP操作的优秀选择。

JSONPlaceholder API作为一个实用且方便的来源,适合用来测试和原型化您的HTTP请求。


http://www.kler.cn/a/428805.html

相关文章:

  • 深度学习 · 手撕 DeepLearning4J ,用Java实现手写数字识别 (附UI效果展示)
  • Linux探秘坊-------3.开发工具详解(2)
  • (7)(7.2) 围栏
  • 【Leetcode 每日一题】2239. 找到最接近 0 的数字
  • Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
  • 【STM32-学习笔记-14-】FLASH闪存
  • 【JAVA】Java高级:数据库监控与调优:SQL调优与执行计划的分析
  • MySQL(四)--索引
  • QNX系统的编译过程
  • 【uniapp】swiper切换时,v-for重新渲染页面导致文字在视觉上的拉扯问题
  • 40分钟学 Go 语言高并发:【实战】分布式缓存系统
  • Go学习:变量
  • 重生之我在21世纪学C++—关系、条件、逻辑操作符
  • 第三部分:进阶概念 7.数组与对象 --[JavaScript 新手村:开启编程之旅的第一步]
  • 猜数字的趣味小游戏——rand函数、srand函数、time函数的使用
  • 深入探索汽车CMSF功能:工作原理与应用场景详解
  • 基于触觉感知的目标识别技术在智能机器人抓取中的应用综述
  • 项目实现:C++与SQL整合
  • burp(8)-ip伪造及爬虫审计
  • 计算机毕设-基于springboot的实践性教学系统设计与实现(附源码+lw+ppt+开题报告)
  • 证明网络中的流形成一个凸集
  • ETCD的封装和测试
  • 【Python】练习【24-12-8】
  • Mac M1 安装数据库
  • 关于项目二次开发那点事儿
  • 力扣打卡5:LRU缓存