JDK 11新特性

Http客户端

常用类和接口

  • HttpClient.Builder
    • HttpClient 构建工具类
  • HttpRequest.Builder
    • HttpRequest 构建工具类
  • HttpRequest.BodyPublisher
    • 将java 对象转换为可发送的HTTP request body字节流,如form表单提交
  • HttpResponse.BodyHandler
    • 处理接收到的Response Body

 

package com.ybchen.jdk11;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/**
 * @Description:
 * @Author:chenyanbin
 * @Date:2020/12/24 9:17 下午
 * @Versiion:1.0
 */
public class HttpDemo {
    public static void main(String[] args) {
        try {
            testGet();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    private static final String targetUrl="https://www.cnblogs.com/chenyanbin/ajax/news.aspx";
    private static final URI uri=URI.create(targetUrl);
    private static final void testGet() throws IOException, InterruptedException {
        HttpClient httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofMillis(5000)).build();
        HttpRequest httpRequest = HttpRequest.newBuilder().timeout(Duration.ofMillis(3000))
                .header("key1", "value2")
                .GET()
                .uri(uri)
                .build();
        HttpResponse<String> send = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
        System.out.println(send.body());
    }
}
GET请求

 

package com.ybchen.jdk11;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

/**
 * @Description:
 * @Author:chenyanbin
 * @Date:2020/12/24 9:32 下午
 * @Versiion:1.0
 */
public class HttpDemo2 {
    public static void main(String[] args) {
        String json = "{\n" +
                "    \"name\":\"alex\",\n" +
                "    \"phone\":\"2020\",\n" +
                "    \"pwd\":\"jqk\"\n" +
                "}";
        testPost(json);
    }

    private static final String targetUrl = "http://127.0.0.1:8081/api/v1/pri/user/registerx";
    private static final URI uri = URI.create(targetUrl);

    private static void testPost(String json) {
        HttpClient httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofMillis(5000)).build();
        HttpRequest httpRequest = HttpRequest.newBuilder().timeout(Duration.ofMillis(3000))
                .header("key1", "value2")
                .uri(uri)
                //json格式的时候,传入如下
                .header("Content-Type", "application/json")
                //form表单时,使用
//                .header("Content-Type","application/x-www-form-urlencoded")
//                .POST(HttpRequest.BodyPublishers.ofString("name=123&pwd=456"))
                .POST(HttpRequest.BodyPublishers.ofString(json))
                .build();
        try {
            HttpResponse<String> send = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
            System.out.println(send.body());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
POST方式json/form
package com.ybchen.jdk11;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

/**
 * @Description:
 * @Author:chenyanbin
 * @Date:2020/12/24 9:17 下午
 * @Versiion:1.0
 */
public class HttpDemo {
    public static void main(String[] args) throws InterruptedException, ExecutionException, IOException {
            testAsynGet();
    }
    private static final String targetUrl="https://www.cnblogs.com/chenyanbin/ajax/news.aspx";
    private static final URI uri=URI.create(targetUrl);
    private static final void testAsynGet() throws IOException, InterruptedException, ExecutionException {
        HttpClient httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofMillis(5000)).build();
        HttpRequest httpRequest = HttpRequest.newBuilder().timeout(Duration.ofMillis(3000))
                .header("key1", "value2")
                .GET()
                .uri(uri)
                .build();
        CompletableFuture<String> stringCompletableFuture = httpClient
                .sendAsync(httpRequest, HttpResponse.BodyHandlers.ofString())
                .thenApply(HttpResponse::body);
        System.out.println(stringCompletableFuture.get());
    }
}
异步GET

 

posted @ 2020-12-24 21:58  陈彦斌  阅读(153)  评论(0)    收藏  举报