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 @   陈彦斌  阅读(148)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2019-12-24 从入门到精通-Redis,图文并茂、分布式锁、主从复制、哨兵机制、Cluster集群、缓存击穿、缓存雪崩、持久化方案、缓存淘汰策略 附案例源码
点击右上角即可分享
微信分享提示
主题色彩