跳转至
用户认证 - eMac Tech Docs

用户认证

重要提醒

为了您的权益以及学习体验,请不要外借账号!

如果您没有账号或忘记密码,请联系管理员重置密码。

请输入您的登录信息

HTTP协议编程

HTTP协议基础

flowchart TD
    HTTP协议[HTTP协议]
    HTTP协议 --> 请求方法
    HTTP协议 --> 状态码
    HTTP协议 --> 首部字段
    HTTP协议 --> 报文结构

核心API

// HttpURLConnection
URL url = new URL("http://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");

// HttpClient (Java 11+)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("http://example.com"))
    .build();

HTTP客户端实现

// 使用HttpURLConnection
public static String get(String urlStr) throws IOException {
    URL url = new URL(urlStr);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    try (BufferedReader in = new BufferedReader(
        new InputStreamReader(conn.getInputStream()))) {
        return in.lines().collect(Collectors.joining());
    }
}

// 使用HttpClient
public static String getWithHttpClient(String url) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create(url))
        .build();
    HttpResponse<String> response = client.send(
        request, HttpResponse.BodyHandlers.ofString());
    return response.body();
}

连接池管理

// 创建连接池
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200); // 最大连接数
cm.setDefaultMaxPerRoute(20); // 每个路由最大连接数

// 配置HttpClient
CloseableHttpClient httpClient = HttpClients.custom()
    .setConnectionManager(cm)
    .build();

性能优化

  1. 启用连接复用
  2. 合理设置超时时间
  3. 使用GZIP压缩
  4. 批量请求合并
  5. 异步非阻塞IO