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

Apache HttpComponents HttpClient

  Apache HttpComponents HttpClient 

Apache HttpComponents HttpClient 是 Apache 提供的一个开源库,用于在 Java 应用程序中执行 HTTP 请求和响应处理。它支持同步和异步模式,提供了对常见 HTTP 操作的简单而强大的封装。

1.HTTP 请求

实体

实体可以理解为 HTTP 请求或响应的“数据负载”。它可以包含:

  • 字符串数据(如 JSON、XML)
  • 文件数据(如图片、PDF)
  • 表单数据(如 x-www-form-urlencodedmultipart/form-data

通过 Entity 类封装的请求体或响应体可以承载任何格式的数据,传递给服务器或从服务器接收。

请求数据格式: 

  • application/x-www-form-urlencoded

    • 格式:键值对形式,key=value,多个键值对之间用 & 连接。
    • 编码:特殊字符和空格使用 URL 编码(如空格为 +& 编码为 %26)。
    • 应用:传统 Web 表单提交的默认格式,常用于简单数据的传输。
    • 示例
      name=John+Doe&age=25&city=New+York
      
  • application/json

    • 格式:JSON 格式,表示复杂的对象结构,用 {} 表示对象,键值对用 : 连接。
    • 编码:不需要 URL 编码,数据直接作为 JSON 字符串传输。
    • 应用:现代 RESTful API 常用的数据格式,适合复杂对象和嵌套结构。
    • {
        "name": "John Doe",
        "age": 25,
        "city": "New York"
      }
      

超时配置:

  • 连接超时 (setConnectTimeout):设定客户端与服务器建立连接的最大等待时间。
  • 请求超时 (setConnectionRequestTimeout):从连接池获取连接的最大等待时间。
  • 读取超时 (setSocketTimeout):等待服务器返回数据的最大时间。
private static RequestConfig builderRequestConfig() {
    return RequestConfig.custom()
        .setConnectTimeout(TIMEOUT_MSEC)         // 连接超时
        .setConnectionRequestTimeout(TIMEOUT_MSEC) // 请求超时
        .setSocketTimeout(TIMEOUT_MSEC)          // 读取超时
        .build();                                // 构建配置
}

2. 主要功能

  • HTTP 请求的发送:支持 GET、POST、PUT、DELETE 等各种 HTTP 请求方法。
  • 连接管理:包括持久连接、连接池和请求重试等机制,确保高效和可靠的 HTTP 连接管理。
  • 超时控制:支持连接超时、请求超时、套接字超时的配置。
  • SSL 支持:内置对 HTTPS(SSL/TLS)的支持,能够通过证书进行安全通信。
  • 重定向与代理支持:自动处理 HTTP 重定向以及通过代理服务器发送请求。

 3.示例网络请求

import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.util.EntityUtils;
import org.apache.http.entity.StringEntity;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        // 创建HttpClient
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            
            // GET请求
            HttpGet getRequest = new HttpGet("http://www.example.com");
            try (CloseableHttpResponse response = httpClient.execute(getRequest)) {
                String getResult = EntityUtils.toString(response.getEntity());
                System.out.println("GET响应: " + getResult);
            }

            // POST请求
            HttpPost postRequest = new HttpPost("http://www.example.com/post");
            postRequest.setEntity(new StringEntity("{\"key\":\"value\"}", "UTF-8"));
            postRequest.setHeader("Content-Type", "application/json");
            try (CloseableHttpResponse response = httpClient.execute(postRequest)) {
                String postResult = EntityUtils.toString(response.getEntity());
                System.out.println("POST响应: " + postResult);
            }
        }
    }
}
  • GET 请求

    • 需要将返回的实体通过 EntityUtils.toString() 转为字符串,以方便处理响应内容。
  • POST 请求

    • 使用 setHeader() 设置请求头信息,例如 Content-Typeapplication/json,并指定编码方式。
    • 需要使用 StringEntity 封装请求数据为一个实体对象,方便发送带有请求体的数据。

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

相关文章:

  • Android中桌面小部件的开发流程及常见问题和解决方案
  • 俏美韵从心出发,与女性一道为健康生活贡献力量
  • 【QT】QSS
  • 移动端【01】面试系统的MVVM重构实践
  • k8s集群安装(kubeadm)
  • ElasticSearch学习笔记一:简单使用
  • Blender软件三大渲染器Eevee、Cycles、Workbench对比解析
  • mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(18)
  • Tron/ETH/MATIC/TRX链上智能合约项目开发
  • 【系统架构设计师】软件架构的风格(经典习题)
  • SpringBoot启动横幅输出到控制台。
  • fiddler抓包07_抓IOS手机请求
  • 预付费计量系统实体模型
  • 在Docker中运行Tomcat:打造高效可移植的Java Web服务器
  • 01_RabbitMQ安装及工作模式
  • 阿里HPN-用于大型语言模型训练的数据中心网络
  • Kafka 下载安装及使用总结
  • JavaWeb初阶 day1
  • 从零开始学习Linux(14)---线程池
  • 『功能项目』QFrameWorkBug关联Slot(插槽)【67】
  • C++:使用tinyxml2获取节点下元素
  • android kotlin Extension扩展函数
  • HashMap源码
  • 【bug】通过lora方式微调sdxl inpainting踩坑
  • 用uniapp 及socket.io做一个简单聊天 升级 9
  • 【LeetCode】289.生命游戏