java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解
1. 什么是HttpClient?
HttpClient是Java 11中引入的一個(gè)新特性,用于支持同步和異步發(fā)送HTTP請(qǐng)求以及處理HTTP響應(yīng)。它提供了簡單易用的API,使得發(fā)送HTTP請(qǐng)求變得非常簡單。
2. HttpClient的主要組件
HttpClient由以下幾個(gè)主要組件組成:
HttpClient:用于發(fā)送請(qǐng)求的主要類。HttpRequest:表示一個(gè)HTTP請(qǐng)求。HttpResponse:表示一個(gè)HTTP響應(yīng)。
3. 發(fā)送GET請(qǐng)求
要使用HttpClient發(fā)送GET請(qǐng)求,可以創(chuàng)建一個(gè)HttpClient對(duì)象,然后創(chuàng)建一個(gè)HttpRequest對(duì)象并設(shè)置請(qǐng)求方法為GET。最后,使用HttpClient的send()方法發(fā)送請(qǐng)求并獲取響應(yīng)。以下是一個(gè)簡單示例:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HttpClientGetExample {
public static void main(String[] args) {
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.example.com/"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}4. 發(fā)送POST請(qǐng)求
要使用HttpClient發(fā)送POST請(qǐng)求,可以創(chuàng)建一個(gè)HttpClient對(duì)象,然后創(chuàng)建一個(gè)HttpRequest對(duì)象并設(shè)置請(qǐng)求方法為POST。還需要設(shè)置請(qǐng)求體,例如表單數(shù)據(jù)或JSON數(shù)據(jù)。最后,使用HttpClient的send()方法發(fā)送請(qǐng)求并獲取響應(yīng)。以下是一個(gè)簡單示例:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
public class HttpClientPostExample {
public static void main(String[] args) {
try {
HttpClient client = HttpClient.newHttpClient();
String postData = "username=user&password=pass";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.example.com/login"))
.header("Content-Type", "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString(postData))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}5. 異步請(qǐng)求
HttpClient還支持異步發(fā)送HTTP請(qǐng)求。要發(fā)送異步請(qǐng)求,可以使用HttpClient的sendAsync()方法。以下是一個(gè)簡單示例:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HttpClientAsyncExample {
public static void main(String[] args) {
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.example.com/"))
.GET()
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
} catch (Exception e) {
e.printStackTrace();
}
}
}6. 自定義HttpClient
可以通過HttpClient.Builder類自定義HttpClient,例如設(shè)置超時(shí)、代理、重定向策略等。以下是一個(gè)簡單示例,演示如何設(shè)置超時(shí)和代理:
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class CustomHttpClientExample {
public static void main(String[] args) {
try {
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(5))
.proxy(ProxySelector.of(new InetSocketAddress("myproxy.example.com", 8080)))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.example.com/"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}現(xiàn)在,您已經(jīng)了解了Java的HttpClient的基本概念和用法。實(shí)際上,還有許多其他功能和配置可以探索。在實(shí)際項(xiàng)目中,您可能需要根據(jù)具體需求調(diào)整HttpClient的配置。希望這些示例能幫助您更好地理解Java網(wǎng)絡(luò)編程中的HttpClient組件,更多關(guān)于java HttpClient的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
以上就是java 11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解的詳細(xì)內(nèi)容,更多關(guān)于java HttpClient發(fā)送請(qǐng)求的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Java通過httpclient比較重定向和請(qǐng)求轉(zhuǎn)發(fā)
- Java HttpClient執(zhí)行請(qǐng)求時(shí)配置cookie流程詳細(xì)講解
- Java HttpClient-Restful工具各種請(qǐng)求高度封裝提煉及總結(jié)
- java中httpclient封裝post請(qǐng)求和get的請(qǐng)求實(shí)例
- java爬蟲之使用HttpClient模擬瀏覽器發(fā)送請(qǐng)求方法詳解
- java發(fā)送form-data請(qǐng)求實(shí)現(xiàn)文件上傳的示例代碼
- Java請(qǐng)求調(diào)用參數(shù)格式為form-data類型的接口代碼示例
- Java后臺(tái)接收數(shù)據(jù)的三種方式(url、form-data與application/json)
- Java httpclient請(qǐng)求form-data格式并設(shè)置boundary代碼實(shí)現(xiàn)方法
相關(guān)文章
SpringBoot中@Autowired爆紅原理分析及解決
這篇文章主要介紹了SpringBoot中@Autowired爆紅原理分析及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java中volatile關(guān)鍵字實(shí)現(xiàn)原理
本文詳細(xì)解讀一下volatile關(guān)鍵字如何保證變量在多線程之間的可見性,對(duì)Java中volatile關(guān)鍵字實(shí)現(xiàn)原理感興趣的朋友一起通過本文學(xué)習(xí)吧2017-06-06
Java使用Redis實(shí)現(xiàn)微博熱搜功能
在社交平臺(tái)上,熱搜功能是一個(gè)非常重要的組成部分,它展示了當(dāng)前最熱門的話題,幫助用戶迅速了解最受關(guān)注的事件,Redis 是一個(gè)高性能的鍵值存儲(chǔ)系統(tǒng),通常用于緩存和實(shí)時(shí)數(shù)據(jù)存儲(chǔ),本文將通過 Java 結(jié)合 Redis 實(shí)現(xiàn)一個(gè)簡化版的微博熱搜功能,需要的朋友可以參考下2024-12-12
解決java.util.RandomAccessSubList cannot be cas
當(dāng)你嘗試將RandomAccessSubList強(qiáng)制轉(zhuǎn)換為ArrayList時(shí),會(huì)拋出ClassCastException異常,解決這個(gè)問題,你可以使用List接口進(jìn)行操作,或者使用ArrayList的構(gòu)造函數(shù)創(chuàng)建新的ArrayList對(duì)象來處理子列表2025-11-11
java實(shí)現(xiàn)圖書館管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖書館管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10

