在 Java 中尋找 URL 的重定向 URL
一、簡介
了解 URL 的重新導向方式對於 Web 開發和網頁程式設計任務至關重要,例如處理 HTTP 重新導向、驗證 URL 重新導向或提取最終目標 URL。在 Java 中,我們可以使用HttpURLConnection
或HttpClient
函式庫來完成此功能。
在本教程中,我們將探索在 Java 中尋找給定 URL 的重定向 URL 的不同方法。
2.使用HttpURLConnection
Java 提供了HttpURLConnection
類,它允許我們發出 HTTP 請求並處理回應。此外,我們也可以利用HttpURLConnection
來尋找給定 URL 的重定向 URL。具體方法如下:
String canonicalUrl = "http://www.baeldung.com/";
String expectedRedirectedUrl = "https://www.baeldung.com/";
@Test
public void givenOriginalUrl_whenFindRedirectUrlUsingHttpURLConnection_thenCorrectRedirectedUrlReturned() throws IOException {
URL url = new URL(canonicalUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setInstanceFollowRedirects(true);
int status = connection.getResponseCode();
String redirectedUrl = null;
if (status == HttpURLConnection.HTTP_MOVED_PERM || status == HttpURLConnection.HTTP_MOVED_TEMP) {
redirectedUrl = connection.getHeaderField("Location");
}
connection.disconnect();
assertEquals(expectedRedirectedUrl, redirectedUrl);
}
在這裡,我們定義原始 URL 字串 ( canonicalUrl
) 和重定向 URL ( expectedRedirectedUrl
)。然後,我們建立一個HttpURLConnection
物件並開啟到原始 URL 的連線。
然後,我們將instanceFollowRedirects
屬性設為true
以啟用自動重定向。收到回應後,我們檢查狀態代碼以確定是否發生重定向。如果發生重定向,我們會從「 Location
」標頭中檢索重定向的URL
。
最後,我們斷開連接並斷言檢索到的重定向URL
與預期的 URL 相符。
3.使用Apache HttpClient
或者,我們可以使用 Apache HttpClient
,這是一個更通用的 Java HTTP 用戶端程式庫。 Apache HttpClient
為處理 HTTP 請求和回應提供了更進階的功能和更好的支援。以下是我們如何使用 Apache HttpClient
尋找重新導向的 URL:
@Test
public void givenOriginalUrl_whenFindRedirectUrlUsingHttpClient_thenCorrectRedirectedUrlReturned() throws IOException {
RequestConfig config = RequestConfig.custom()
.setRedirectsEnabled(false)
.build();
try (CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(config).build()) {
HttpGet httpGet = new HttpGet(canonicalUrl);
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
int statusCode = response.getStatusLine().getStatusCode();
String redirectedUrl = null;
if (statusCode == HttpURLConnection.HTTP_MOVED_PERM || statusCode == HttpURLConnection.HTTP_MOVED_TEMP) {
org.apache.http.Header[] headers = response.getHeaders("Location");
if (headers.length > 0) {
redirectedUrl = headers[0].getValue();
}
}
assertEquals(expectedRedirectedUrl, redirectedUrl);
}
}
}
在此測試中,我們首先配置請求以停用自動重定向。隨後,我們實例化一個CloseableHttpClient
並將HttpGet
請求分派到原始 URL。
獲得回應後,我們分析狀態代碼和標頭以確定是否發生重定向。如果發生重定向,我們會從Location
標頭擷取重定向的 URL。
4。
在本文中,我們討論了正確處理重定向對於建立與外部資源互動的健全 Web 應用程式至關重要。我們探索如何使用HttpURLConnection
和 Apache HttpClient
來尋找給定 URL 的重新導向 URL。
與往常一樣,隨附的源代碼可以 在 GitHub 上找到。