java中的Http客户端对比

2021-01-08

# java原生 jdk11

https://openjdk.org/groups/net/httpclient/intro-incubating.html
https://openjdk.org/jeps/110

核心类有
HttpRequest
HttpRequest.Builder
HttpHeaders
HttpClient
HttpResponse

上述所有类都在包 `package java.net.http;`下。

@Override
   public void print(String url) {
       HttpClient httpClient = HttpClient.newHttpClient();

       HttpRequest.Builder builder = HttpRequest.newBuilder();
       builder.GET();
       builder.uri(java.net.URI.create(url));
       builder.header("User-Agent","Java 11 HttpClient Bot");
       builder.header("Authorization","Bearer 12313213123");

       HttpRequest httpRequest = builder.build();

       try {
           HttpResponse<String> result = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
           HttpHeaders resultHeaders = result.headers();
           String body = result.body();

           System.out.println("HttpHeaders: " + resultHeaders);
       }catch (Exception e){
           e.printStackTrace();
       }
   }

## 设置代理

builder.proxy(ProxySelector.of(new InetSocketAddress("www-proxy.com", 8080)))
//只支持http代理,不支持socks


# OkHttp

https://square.github.io/okhttp/#releases


<dependency>
   <groupId>com.squareup.okhttp3</groupId>
   <artifactId>okhttp</artifactId>
   <version>4.11.0</version>
</dependency>
   @Override
   public void print(String url) {
       OkHttpClient httpClient = new OkHttpClient.Builder()
               .proxy(new Proxy(Proxy.Type.SOCKS,new java.net.InetSocketAddress("localhost",1080)))
               .build();

       Request request = new Request.Builder()
               .get()
               .url(url)
               .build();
       try(Response response = httpClient.newCall(request).execute()){
           System.out.println("HttpHeaders: " + response.headers());
           System.out.println("HttpBody: " + response.body().string());
       }catch (Exception e){
           e.printStackTrace();
       }
   }