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

使用Apache HttpClient发起一个POST HTTP请求

Apache HttpClient 是一个强大的Java库,用于处理HTTP请求。

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

本教程将重点介绍如何使用Apache HttpClient发送POST HTTP请求。

POST请求通常用于向服务器发送数据以创建或更新资源。

我们将演示如何发送带有JSON数据的POST请求,并处理响应。

Maven依赖

要使用Apache HttpClient,请在你的pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.3</version>
</dependency>

示例场景

我们将创建一个简单的Java类,向指定URL发送带有JSON数据的POST请求,并打印响应。

JSONPlaceholder API

我们将使用JSONPlaceholder API作为示例。

该API提供了模拟在线RESTful端点,用于测试和原型设计。POST请求的URL为:
https://jsonplaceholder.typicode.com/posts

发送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.ContentType;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.io.entity.StringEntity;

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)) {
                // 获取响应状态码
                System.out.println("响应码: " + response.getCode());

                // 获取响应内容
                String content = EntityUtils.toString(response.getEntity());
                System.out.println("响应内容: \n" + content);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

说明

  • 添加Maven依赖org.apache.httpcomponents.client5:httpclient5 依赖提供了使用Apache HttpClient创建和执行HTTP请求所需的类。
  • 创建HttpClient实例CloseableHttpClient httpClient = HttpClients.createDefault(); 使用默认配置创建了一个CloseableHttpClient实例。
  • 创建HttpPost请求HttpPost request = new HttpPost(url); 为指定URL创建了一个HttpPost请求。
  • 设置JSON负载StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON); 创建了一个包含JSON数据的StringEntity,并将内容类型设置为application/jsonrequest.setEntity(entity); 将实体(负载)设置到POST请求中。
  • 设置请求头:通过调用setHeader方法设置了AcceptContent-type头部信息。
  • 执行请求try (CloseableHttpResponse response = httpClient.execute(request)) { ... } 执行POST请求并获取响应。
  • 获取响应状态码System.out.println("响应码: " + response.getCode()); 打印HTTP响应的状态码。
  • 获取响应内容String content = EntityUtils.toString(response.getEntity()); 将响应实体转换为字符串并打印内容。

运行示例

只需运行HttpClientPostExample类,你就能在控制台看到响应状态码和响应内容。

示例输出

响应码: 201
响应内容: 
{
  "title": "foo",
  "body": "bar",
  "userId": 1,
  "id": 101
}

额外配置

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

结论

使用Apache HttpClient发送POST HTTP请求既简单又灵活。

按照本教程,你现在应该能够创建并执行POST请求、处理响应以及定制HTTP请求和响应过程中的各种方面了。

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

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


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

相关文章:

  • 基于TensorFlow框架的线性回归实现
  • 小结:window.performance性能分析
  • R语言机器学习论文(二):数据准备
  • CSS学习记录03
  • arkTS:持久化储存UI状态的基本用法(PersistentStorage)
  • 1、C++ 介绍
  • 【Android 腾讯地图】腾讯地图开发记录 ① ( 地图基础显示 | 创建应用和申请key | 配置远程依赖库 | 配置腾讯地图 Key | 同意隐私协议 | 布局设置 | 覆盖自定义地图图片 )
  • burp2
  • DeviceIoControl超时后如何处理
  • 【Spring】接口版本控制最佳实现
  • Vue3 父子组件传值
  • ESLint 规则入门:如何配置重要性及选项(2)
  • 【数据分析】如何根据数据选择图表类型
  • 【Android】组件化嘻嘻嘻gradle耶耶耶
  • 下载 M3U8 格式的视频
  • c++ mfc调用UpdateData(TRUE)时,发生异常
  • ElasticSearch easy-es 聚合函数 group by 混合写法求Top N 词云 分词
  • k8s,声明式API对象理解
  • 基于Java Springboot广西文化传承微信小程序
  • 洛谷 B2029:大象喝水 ← 圆柱体体积
  • 《Vue零基础教程》(5)计算属性和侦听器好讲解
  • 【Linux|计算机网络】HTTPS工作原理与安全机制详解
  • 说说Elasticsearch查询语句如何提升权重?
  • Leetcode 303 Range Sum Query - Immutable
  • 靶机dpwwn-01
  • vue3项目最新eslint9+prettier+husky+stylelint+vscode配置