# java httpClient

Java中和其他系统进行交互,http接口调用是最频繁不过的的一种方式了。

# HttpURLConnection

最初都是使用Java自带的HttpURLConnection进行接口调用.

    URL url = new URL("https://z.wiki");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    conn.setUseCaches(false);
    conn.setConnectTimeout(5000); // 请求超时5秒
    conn.connect();
    
    if (conn.getResponseCode() != 200) {
      throw new RuntimeException("bad response");
    }
    
    // 获取响应内容:
    InputStream input = conn.getInputStream();

直接使用HttpURLConnection的成本还是比较高的,另外代码也比较冗余。

# apache HttpClient

后来发现 Apache httpClient 很好用。

Request.Get("https://z.wiki")
    .execute().returnContent();

# OKHttpClient

也不错。

  private final OkHttpClient client = new OkHttpClient();

  public void run() throws Exception {
    Request request = new Request.Builder()
        .url("https://z.wiki")
        .build();
    client.newCall(request).execute();
  }

# RestTemplate

spring boot中也可以用RestTemplate

Bo product = restTemplate.getForObject(url, Bo.class);

不过,从Java 11开始,有了更优的选项,全新的HttpClient

# Java11 HttpClient

Java 11中全新的HttpClient提供了链式调用api简化操作,由于该HttpClient线程安全且内部通过线程池优化性能,可以创建全局实例。

static HttpClient httpClient = HttpClient.newBuilder().build();

GET请求示例如下:

package com.itranswarp.oauth.provider;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class T {
  // 线程安全且内部通过线程池优化性能,故创建全局实例
  static HttpClient httpClient = HttpClient.newBuilder().build();

  public static void main(String[] args) throws Exception {
    String url = "https://z.wiki/";
    HttpRequest request = HttpRequest.newBuilder(new URI(url)).build();
    HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body().toString());
  }
}

如果接口返回的是html内容,可以通过jsoup 进行html解析、修改。

如果接口返回的并非是字符串,可以通过HttpResponse.BodyHandlers.ofByteArray()HttpResponse.BodyHandlers.ofInputStream()等方式获取到二进制数据(数据流)。

the end
最后更新: Wed, 09 Aug 2023 14:27:36 GMT

0 评论

加载中...
访问量:-