Java-HTTP客户端:发送请求与处理响应

在测试中使用HTTP客户端发送 HTTP 请求(GET、POST 等)来调用接口,并对响应结果进行解析和验证。

核心流程:创建客户端 → 构建请求(URL/头/体) → 执行 → 解析响应

1、Java 标准库:HttpURLConnection(基础)

  • Java 标准库 HttpURLConnection:API 较底层、使用不便,适合非常简单的请求,推荐使用其它第三方库
  • Apache HttpClient:功能强大、成熟稳定、配置灵活,需要添加依赖、API 稍复杂
  • OkHttp:性能优异、API 简洁,需要添加依赖
  • RestAssured:专为测试设计,需要添加依赖、学习成本

2、Apache HttpClient(推荐使用,功能强大)

核心类/接口作用
CloseableHttpClient HTTP 客户端对象,用于执行请求。每个测试类通常创建一个共享实例,以提高性能。
HttpGet / HttpPost 表示具体的 HTTP 请求方法,可设置 URL、请求头、请求体等。
HttpResponse 封装了服务器返回的响应,包含状态行、响应头、响应体等。
EntityUtils.toString() 工具方法,用于将响应实体(HttpEntity)转换为字符串。注意编码
StringEntity 用于封装字符串类型的请求体(如 JSON 或 XML)。
发送 GET 请求
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClientGetDemo {
    public static void main(String[] args) {
        // 1. 创建可关闭的 HttpClient 实例
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            // 2. 创建 GET 请求对象
            HttpGet httpGet = new HttpGet("https://api.example.com/users/1");
            // 可选:设置请求头
            httpGet.setHeader("Accept", "application/json");

            // 3. 执行请求,获取响应对象
            HttpResponse response = client.execute(httpGet);

            // 4. 处理响应
            int statusCode = response.getStatusLine().getStatusCode();
            String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");

            System.out.println("状态码: " + statusCode);
            System.out.println("响应体: " + responseBody);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
发送 POST 请求
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpClientPostDemo {
    public static void main(String[] args) {
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            HttpPost httpPost = new HttpPost("https://api.example.com/users");

            // 1. 设置请求头,标明发送 JSON 数据
            httpPost.setHeader("Content-Type", "application/json");
            httpPost.setHeader("Accept", "application/json");

            // 2. 构造 JSON 请求体
            String json = "{\"name\":\"Alice\", \"age\":30}";
            StringEntity entity = new StringEntity(json, "UTF-8");
            httpPost.setEntity(entity);

            // 3. 执行请求
            HttpResponse response = client.execute(httpPost);

            // 4. 处理响应
            System.out.println("状态码: " + response.getStatusLine().getStatusCode());
            System.out.println("响应体: " + EntityUtils.toString(response.getEntity(), "UTF-8"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
核心配置:超时和连接管理
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;

// 创建带超时配置的 HttpClient
RequestConfig config = RequestConfig.custom()
        .setConnectTimeout(5000)      // 连接超时(毫秒)
        .setSocketTimeout(3000)       // 读取数据超时
        .setConnectionRequestTimeout(2000) // 从连接池获取连接的超时时间
        .build();

CloseableHttpClient client = HttpClientBuilder.create()
        .setDefaultRequestConfig(config)
        .build();
  • 处理响应:获取到响应体字符串后,通常需要结合 JSON 解析库(如 Jackson、Gson)将字符串转换为 Java 对象,便于后续断言和验证。

  • 异常处理:在实际测试中,可以分别捕获 ConnectTimeoutException、SocketTimeoutException 等,以便对不同的网络问题做出更精确的判断和处理。

3、测试中的典型场景

  1. 单接口测试:直接调用待测接口,验证响应状态码和返回数据是否符合预期。

  2. 多接口联调:模拟用户操作流程(如登录→查询→修改),验证数据流转正确性。

  3. 认证与授权:在请求头中携带 Token 或 Cookie 进行接口调用。

  4. 数据驱动测试:从数据文件中读取多组参数,循环发送请求,验证不同输入下的响应。

  5. 性能测试前置:使用 HTTP 客户端编写脚本,为压力测试准备基础数据或执行预热。

posted @ 2026-08-17 11:31  Fēngwèi  阅读(4)  评论(0)    收藏  举报