Heim  >  Artikel  >  Java  >  So lösen Sie die Java-Netzwerkverbindungsumleitungsausnahme (RedirectException)

So lösen Sie die Java-Netzwerkverbindungsumleitungsausnahme (RedirectException)

WBOY
WBOYOriginal
2023-08-27 08:54:401172Durchsuche

So lösen Sie die Java-Netzwerkverbindungsumleitungsausnahme (RedirectException)

So lösen Sie die Java-Netzwerkverbindungsumleitungsausnahme (RedirectException)

Wenn Sie Java für die Netzwerkverbindung verwenden, kann es manchmal zu einer Netzwerkverbindungsumleitungsausnahme (RedirectException) kommen. Diese Ausnahme tritt normalerweise auf, wenn auf eine URL zugegriffen wird und der Server eine umgeleitete Antwort anstelle des angeforderten Inhalts zurückgibt. In diesem Artikel wird erläutert, wie Sie dieses Problem lösen können, zusammen mit einigen Codebeispielen.

Zuerst müssen wir verstehen, was eine Netzwerkverbindungsumleitung ist. Im HTTP-Protokoll kann der Server den Client über einen bestimmten Antwortcode anweisen, die Anfrage an eine neue URL umzuleiten. Wenn ein Java-Programm Tools wie HttpURLConnection oder HttpClient verwendet, um eine Verbindung zum Netzwerk herzustellen und der Server eine umgeleitete Antwort zurückgibt, löst das Java-Programm eine RedirectException-Ausnahme aus.

Eine Möglichkeit, dieses Problem zu lösen, besteht darin, die Weiterleitung manuell durchzuführen. Wir können manuell eine neue Anfrage initiieren, indem wir den Statuscode der Weiterleitungsantwort überprüfen und die neue Weiterleitungs-URL abrufen. Hier ist ein Beispiel für die Verwendung von HttpURLConnection zur Verarbeitung von Weiterleitungen:

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

public class RedirectHandler {

    public void handleRedirect(String urlString) throws IOException {
        URL url = new URL(urlString);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setInstanceFollowRedirects(false); // 禁止自动处理重定向
        int responseCode = connection.getResponseCode();

        if (responseCode == HttpURLConnection.HTTP_MOVED_PERM || responseCode == HttpURLConnection.HTTP_MOVED_TEMP ||
                responseCode == HttpURLConnection.HTTP_SEE_OTHER) {
            String newUrl = connection.getHeaderField("Location"); // 获取新的重定向URL
            connection = (HttpURLConnection) new URL(newUrl).openConnection();
        }

        // 处理重定向后的请求
        // ...
    }

    public static void main(String[] args) {
        RedirectHandler handler = new RedirectHandler();
        try {
            handler.handleRedirect("http://example.com");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Im obigen Beispiel deaktivieren wir zunächst die automatische Verarbeitung von Weiterleitungen durch HttpURLConnection und überprüfen dann den zurückgegebenen Statuscode. Wenn der Statuscode 301, 302 oder 303 ist, bedeutet dies, dass der Server umgeleitet hat, indem wir das Feld „Standort“ im Antwortheader abrufen und dann erneut eine neue Anfrage initiieren.

Zusätzlich zur manuellen Bearbeitung von Weiterleitungen können Sie auch einige Bibliotheken von Drittanbietern verwenden, um den Prozess zu vereinfachen. Beispielsweise bietet die Apache HttpClient-Bibliothek die Funktion zur automatischen Verarbeitung von Weiterleitungen. Wir müssen beim Erstellen des HttpClient-Objekts nur die entsprechende Konfiguration festlegen, wie unten gezeigt:

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClientBuilder;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class RedirectHandler {

    public void handleRedirect(String urlString) throws IOException, URISyntaxException {
        URI uri = new URIBuilder(urlString).build();
        HttpClient httpClient = HttpClientBuilder.create().build();
        HttpGet httpGet = new HttpGet(uri);

        // 自动处理重定向
        httpClient.execute(httpGet);

        // 处理重定向后的请求
        // ...
    }

    public static void main(String[] args) {
        RedirectHandler handler = new RedirectHandler();
        try {
            handler.handleRedirect("http://example.com");
        } catch (IOException | URISyntaxException e) {
            e.printStackTrace();
        }
    }
}

Im obigen Beispiel haben wir die Apache HttpClient-Bibliothek zur Verarbeitung von Weiterleitungen verwendet . Orientierung. Es erkennt und verarbeitet Weiterleitungen automatisch intern. Wir müssen lediglich das HttpClient-Objekt erstellen und die Anfrage senden.

Zusammenfassend lässt sich sagen: Wenn wir beim Herstellen von Netzwerkverbindungen in Java auf Umleitungsausnahmen stoßen, können wir das Problem lösen, indem wir die Umleitung manuell durchführen oder eine Bibliothek eines Drittanbieters verwenden. In jedem Fall müssen wir anhand des zurückgegebenen Statuscodes feststellen, ob eine Umleitung stattgefunden hat, und eine neue Umleitungs-URL für nachfolgende Anforderungen erhalten.

Das obige ist der detaillierte Inhalt vonSo lösen Sie die Java-Netzwerkverbindungsumleitungsausnahme (RedirectException). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn