7 Stimmen

Java: Wie kann man leicht überprüfen, ob eine URL bereits gekürzt wurde?

Wenn ich eine allgemeine Url (nicht auf Twitter oder Google beschränkt) wie diese habe:

http://t.co/y4o14bI

Gibt es eine einfache Möglichkeit zu überprüfen, ob die URL gekürzt ist?

Im obigen Fall kann ich als Mensch natürlich sehen, dass es gekürzt wurde, aber gibt es eine automatische und elegant Weg?

1voto

gotomanners Punkte 7553

Hier ist, was Sie in Java, Groovy und dergleichen tun könnten.

  • Holen Sie sich die Url, die Sie testen möchten;
  • Öffnen Sie die Url mit HttpURLConnection
  • Prüfen Sie den Antwortcode
  • Wenn es sich um einen gültigen Code handelt, z. B. 200, können Sie die URL-Zeichenfolge in langer Form aus dem Verbindungsobjekt abrufen, wenn sie gekürzt wurde, oder wieder in ihrer ursprünglichen Form, wenn dies nicht der Fall war.

Wir alle lieben es, etwas Code zu sehen, nicht wahr? Es ist grob, aber hey!

String addr = "http://t.co/y4o14bI";
URL url = new URL(addr);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

if (connection.getResponseCode() == 200) {
    String longUrl = connection.url;
    System.out.println(longUrl);
} else {
    // You decide what you want to do here!
}

0voto

Eigentlich können Sie als Mensch das nicht. Der einzige Weg, wie Sie wissen Der Grund für die Verkürzung ist, dass es sich um eine t.co-Domäne handelt. Die y4o14bI könnte auch ein CMS-Kennzeichen sein.

Am besten wäre es, eine Liste bekannter URLs von Verkürzern zu verwenden und mit diesen abzugleichen.

Und selbst dann würden Sie Probleme bekommen. Ich verwende bit.ly mit einer persönlichen Domain, wtn.gd

Así que http://wtn.gd/random wäre auch eine verkürzte URL.

Sie könnten vielleicht eine HTTP HEAD-Anfrage stellen und auf 301/302 prüfen?

0voto

stacker Punkte 65961

Wenn Sie eine URL wie diese anfordern, sollte Ihr HttpCLient eine HTTP-Umleitung anstelle einer HTML-Seite erhalten. Dies wäre zwar kein Beweis, aber zumindest ein Hinweis.

0voto

Mads Hansen Punkte 58777

Bewerten Sie die URL und suchen Sie nach Hinweisen:

  • der Pfad erfüllt bestimmte Kriterien

    • hat nur einen Schritt (d.h. nicht mehrere Schrägstriche)
    • endet nicht mit Dateinamenerweiterungen
    • nicht länger als X Zeichen (man müsste verschiedene URL-Verkürzungsdienste bewerten und die Obergrenzen für die maximale Tokenlänge anpassen)
  • HttpUrlConnection gibt einen ResponseCode für die Umleitung zurück (z. B. 301, 302)

0voto

Tom Punkte 307

Ich würde vorschlagen, Android.util.Patterns.WEB_URL zu verwenden.

public static List<String> findUrls(String input) {
    List<String> links = new ArrayList<>();

    Matcher m =  android.util.Patterns.WEB_URL.matcher(input);
    while (m.find()) {
        String url = m.group();
        links.add(url);
    }
    return links;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X