Java中調用URL請求的5種常見方法詳解
我們主要講最常見的兩種方法:Java原生自帶的 和 第三方好用的庫。
第一部分:Java 自帶的“工具包”(java.net包)
Java自己就提供了一些基礎的通信工具,就像家里自帶的基本工具箱。
方法1:HttpURLConnection (最經典的基礎方法)
步驟:
- 找到對方的地址(創(chuàng)建URL對象)。
- 打開一個連接通道(打開HttpURLConnection)。
- 設置這次溝通的規(guī)則(設置請求方法:GET、POST等)。
- 準備聽對方回復(獲取響應代碼和輸入流)。
- 讀取對方說的話(讀取輸入流,得到數(shù)據(jù))。
- 最后收拾干凈(關閉連接)。
舉個例子(GET請求):
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class BasicHttpExample {
public static void main(String[] args) {
try {
// 1. 確定服務員地址(API地址)
String urlString = "https://api.example.com/data";
URL url = new URL(urlString);
// 2. 打開連接通道
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 3. 設置溝通規(guī)則:這次我們去“獲取”信息(GET)
connection.setRequestMethod("GET");
// 4. 看看服務員反應如何(HTTP狀態(tài)碼 200表示成功)
int responseCode = connection.getResponseCode();
System.out.println("響應代碼: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // 200
// 5. 讀取服務員返回的話(數(shù)據(jù))
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
// 6. 把讀到的話打印出來
System.out.println("響應內容: " + content.toString());
// 7. 收拾干凈
in.close();
}
// 8. 斷開連接
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}優(yōu)點:Java自帶,無需額外下載。
缺點:代碼比較冗長,手動處理的東西多(比如拼接復雜的POST參數(shù)),不夠現(xiàn)代和優(yōu)雅。
第二部分:使用好用的“第三方工具”
因為原生的工具用起來有點麻煩,所以社區(qū)創(chuàng)造了更好用的庫。
方法2:Apache HttpClient (一個非常流行和強大的庫)
如何使用:
- 首先,你需要把這個“工具套裝”添加到你的項目中。
- 使用Maven,在pom.xml里添加依賴
- 使用它的API來發(fā)送請求。
舉個例子(GET請求):
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class ApacheHttpClientExample {
public static void main(String[] args) {
// 1. 創(chuàng)建一輛智能快遞車(HttpClient實例)
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// 2. 寫明送貨地址(創(chuàng)建HttpGet請求)
HttpGet request = new HttpGet("https://api.example.com/data");
// 3. 發(fā)送請求,并拿到回執(zhí)(執(zhí)行請求,獲取響應)
try (CloseableHttpResponse response = httpClient.execute(request)) {
// 4. 檢查回執(zhí)狀態(tài)(狀態(tài)碼)
System.out.println("響應代碼: " + response.getStatusLine().getStatusCode());
// 5. 從回執(zhí)里拿出包裹內容(響應實體)
String responseBody = EntityUtils.toString(response.getEntity());
System.out.println("響應內容: " + responseBody);
}
} catch (Exception e) {
e.printStackTrace();
}
// 注意:這里用了try-with-resources語法,會自動關閉車和回執(zhí),不用手動disconnect。
}
}優(yōu)點:功能強大,支持HTTPS、連接池、Cookie管理等高級特性,API比原生友好。
方法3:OkHttp (一個更現(xiàn)代、高效的庫)
在Android和現(xiàn)代Java應用中非常流行。
如何使用:
同樣需要先添加依賴到項目。
舉個例子(GET請求):
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpExample {
public static void main(String[] args) {
// 1. 創(chuàng)建一輛跑車(OkHttpClient實例)
OkHttpClient client = new OkHttpClient();
// 2. 構建一個送貨請求單(Request)
Request request = new Request.Builder()
.url("https://api.example.com/data")
.build();
// 3. 用跑車發(fā)出請求單,并拿到回執(zhí)(Response)
try (Response response = client.newCall(request).execute()) {
// 4. 檢查回執(zhí)狀態(tài)和內容
System.out.println("響應代碼: " + response.code());
if (response.body() != null) {
String responseBody = response.body().string();
System.out.println("響應內容: " + responseBody);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}優(yōu)點:API設計非常簡潔優(yōu)雅,默認支持HTTP/2,性能好,是現(xiàn)代Java/Kotlin開發(fā)的首選之一。
第三部分:Spring框架的“快捷方式”(RestTemplate 和 WebClient)
方法4:RestTemplate (Spring的同步傳送門)
Spring家族的老牌成員。你告訴它地址,它直接幫你把遠處的數(shù)據(jù)“拿”回來,甚至能自動轉換成Java對象。
// 需要在Spring項目環(huán)境中
import org.springframework.web.client.RestTemplate;
public class SpringRestTemplateExample {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String url = "https://api.example.com/data";
// 發(fā)送GET請求,并將響應直接轉換為String類
String result = restTemplate.getForObject(url, String.class);
System.out.println(result);
}
}特點:超級簡單,但它是同步的(發(fā)請求后必須等回復,期間線程會阻塞)。
方法5:WebClient (Spring的異步、響應式傳送門)
Spring家族的新星,支持非阻塞的異步請求,性能更高,適合處理大量并發(fā)請求。
// 需要在Spring WebFlux項目環(huán)境中
import org.springframework.web.reactive.function.client.WebClient;
public class SpringWebClientExample {
public static void main(String[] args) {
WebClient client = WebClient.create();
client.get()
.uri("https://api.example.com/data")
.retrieve()
.bodyToMono(String.class) // 這里返回的是“承諾”,而不是立即得到結果
.subscribe(result -> System.out.println(result)); // 結果未來好了,會在這里打印
// 主線程不會阻塞,可以繼續(xù)做別的事情
System.out.println("請求已發(fā)出,我在做別的事...");
}
}總結與建議
| 方法 | 適合場景 | 難度 | 備注 |
|---|---|---|---|
| HttpURLConnection | 學習原理、簡單小工具、環(huán)境受限(不能加庫) | 中等 | 初學者建議從這里開始理解概念 |
| Apache HttpClient | 傳統(tǒng)企業(yè)項目,需要豐富功能和穩(wěn)定支持 | 中等 | 功能全,但API稍舊 |
| OkHttp | 現(xiàn)代Java/Android應用,追求簡潔和性能 | 容易 | 對于新項目,這是非常推薦的選擇 |
| RestTemplate | 傳統(tǒng)的Spring Boot項目,簡單同步調用 | 非常容易 | Spring生態(tài),已進入維護模式 |
| WebClient | 響應式、高并發(fā)的Spring項目 | 中等 | Spring未來的方向,支持異步 |
到此這篇關于Java中調用URL請求的5種常見方法詳解的文章就介紹到這了,更多相關Java調用URL請求內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Okhttp在SpringBoot中的應用實戰(zhàn)記錄(太強了)
這篇文章主要給大家介紹了關于Okhttp在SpringBoot中應用實戰(zhàn)的相關資料,在Spring Boot中使用OkHttp主要是為了發(fā)送HTTP請求和處理響應,OkHttp是一個高效、易用的HTTP客戶端庫,它具有簡潔的API和強大的功能,需要的朋友可以參考下2023-12-12
springboot多環(huán)境配置文件及自定義配置文件路徑詳解
這篇文章主要介紹了springboot多環(huán)境配置文件及自定義配置文件路徑,文中給大家介紹了classpath的基本概念講解及自定義springboot配置文件路徑的相關知識,需要的朋友可以參考下2023-02-02
Spring Boot 4 與 Spring Framework&nb
SpringBoot4和SpringFramework7帶來了大量新特性,包括升級到JakartaEE11、支持Java21、增強模塊化、優(yōu)化測試、增加彈性功能等,本文介紹Spring Boot 4 與 Spring Framework 7新特性、升級要點與實戰(zhàn)指南,感興趣的朋友跟隨小編一起看看吧2026-03-03
一文詳解SpringBoot?Redis多數(shù)據(jù)源配置
Spring?Boot默認只允許一種?Redis?連接池配置,且配置受限于?Lettuce?包,不夠靈活,所以本文將為大家介紹如何自定義Redis配置方案實現(xiàn)多數(shù)據(jù)源支持,需要的可以參考下2024-11-11
idea中git如何修改commit(ChangeList的使用)
這篇文章主要介紹了idea中git如何修改commit(ChangeList的使用),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
springboot?vue測試平臺接口定義前后端新增功能實現(xiàn)
這篇文章主要介紹了springboot?vue測試平臺接口定義前后端新增功能實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
SpringBoot 整合Lock4j 分布式鎖深度使用案例講解
本文介紹SpringBoot分布式鎖框架Lock4j,支持Redis、Zookeeper等多種存儲實現(xiàn),通過注解和AOP簡化鎖管理,提供并發(fā)控制、防止重復提交等場景應用,并支持自定義執(zhí)行器和key生成策略,適用于高并發(fā)和異構系統(tǒng)需求,感興趣的朋友一起看看吧2025-07-07

