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()); } }

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(); } } }

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()); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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集群、缓存击穿、缓存雪崩、持久化方案、缓存淘汰策略 附案例源码