Sprawdzanie czy link prowadzi do strony

0

Hej!
Piszę w Javie modyfikator schowka systemowego.
Potrafię już rozpoznać jego typ (czy schowek jest dostępny w postaci plaintext).
Chciałbym sprawdzić czy tekst schowka prowadzi do jakiejkolwiek strony internetowej (czy jest linkiem).
Nie interesuje mnie strona a wynikami wyszukiwań w Google (tekst "forum" wpisany w pasku przeglądarki prowadzi do niej).
Wyrażenia regularne nie chcą działać, gdyż pojawiają się też różne dziwne linki.
Pozdrawiam!

0

Nie pisałem nic sieciowego jeszcze ale może po prostu spróbuj wywołać na danym tekście metodę ping. Wtedy po otrzymanej odpowiedzi z serwera nie tylko dowiesz się czy tekst jest linkiem ale też możesz sprawdzić czy serwer odpowiada czy nie.

0

Dzięki! Wpadłem właśnie na taki pomysł jakieś 10 minut temu.

Coś w stylu:

public static boolean isItValidLink (String linkCadidate) {
		
		HttpURLConnection connection = null;
		try {
			/*
			 * The next line can throw a MalformedURLException.
			 */
	        URL u = new URL(linkCadidate);
	        
	        
	        
	        /*
	         * The next two lines can throw many kinds of exceptions.
	         */
	        connection = (HttpURLConnection) u.openConnection();
	        connection.setRequestMethod("HEAD");
	        
	        
	        /*
	         * Returns -1 if no code can be discerned from the response (i.e., the response is not valid HTTP).
	         */
	        if (connection.getResponseCode() == -1)
	        	return false;
	    } catch (Exception e) {
	        return false;
	    }
		return true;
		
	}

Czekam na konstruktywną krytykę tego kodu.

0

Niestety dla: wp.pl wyrzuca wyjątek... tzn. nie jest to uznawane za URL przez Javę.

0

Pokaż cały kod

0

Przecież wp.pl nie jest linkiem.

0

Dla wp.pl czy też www.wp.pl nie działa opakowanie w javowego URLa.
Dla zdjęcia na facebooku - plik JPG (String rozpoczynający się od https://scontent.fwaw3-1.fna.fbcdn.net/hprofile-xpa1/v/t1.0-1/12105886...) nie działa z kolei ping.

Dlaczego tak się dzieje?

String linkCandidate = "www.wp.pl";
URL u = new URL(linkCadidate);

Wyrzuca wyjątek MalformedURLException. To samo dla "wp.pl".

Ping zależny od systemu:

 public static boolean isReachableByPing(String host) {
    try{
            String cmd = "";
            if(System.getProperty("os.name").startsWith("Windows")) {   
                    // For Windows
                    cmd = "ping -n 1 " + host;
            } else {
                    // For Linux and OSX
                    cmd = "ping -c 1 " + host;
            }

            Process myProcess = Runtime.getRuntime().exec(cmd);
            myProcess.waitFor();

            if(myProcess.exitValue() == 0) {

                    return true;
            } else {

                    return false;
            }

    } catch( Exception e ) {

            e.printStackTrace();
            return false;
    }
}

Nie działa dla zdjęcia na facebooku.
Z debuggera wiem, że myProcess.exitValue() wyrzuca 1.
Why?
Z góry dziękuję.

Zapomniałem dodać. Jest to publicznie dostępne zdjęcie.
Klikam prawym i daję na Copy Image Location w Mozilli Firefox.
Sorry, że rozpisałem kilka postów, powinien być jeden :p

0

www.wp.pl też nie jest linkiem, umieść w pliku html

<a href="www.wp.pl">Wirtualna Polska</a>

i spróbuj się połączyć.
Dokładniej, to jest link, ale nie do serwera tylko do pliku o nazwie www.wp.pl, który musi się znajdować obok pliku html z tym linkiem.
Poprawny URL rozpoczyna się od protokołu, np.

new URL("file://www.wp.pl");
new URL("http://www.wp.pl");
new URL("https://www.wp.pl");

Jeśli chodzi o ping, to nie wiem jaka jest wartość zmiennej host.
Polecenie

Process p = Runtime.getRuntime().exec("ping scontent.fwaw3-1.fna.fbcdn.net");

działa poprawnie. Być może Ty pingujesz do zdjęcia :P, a nie do serwera.

0

www.wp.pl też nie jest linkiem, umieść w pliku html

Dziękuję za odpowiedź!
Nie rozumiemy się, bo źle napisałem. Chodzi mi o "link" podany jako String w Javie.

Celem mojego programu (podprogramu) jest sprawdzenie dostępności danego adresu.
Prościej: co stanie się, jeśli wpiszemy ten String do paska adresu w przeglądarce.
Nie interesuje mnie strona Google z wynikami wyszukiwań (od kiedy większość przeglądarek ma taką funkcję, że z paska adresu możemy wyszukiwać jak w Google).
Interesuje mnie dostępność zarówno zdjęć czy innych plików, jak i innych nazw (np. wp.pl), z którymi można nawiązać połączenie.
Dlatego ani **ping **ani połączenie po próbie utworzenia URLa niezawsze działa... :(

Jeśli chodzi o ping, to nie wiem jaka jest wartość zmiennej host.
Polecenie

Process p = Runtime.getRuntime().exec("ping scontent.fwaw3-1.fna.fbcdn.net");

działa poprawnie. Być może Ty pingujesz do zdjęcia :P, a nie do serwera.

Tak pingowałem do zdjęcia.

Zauważyłem, że jeśli sprawdzę czy conajmniej jedna metoda (ping albo URL) nawiąże połączenie i zwróci true, można się połączyć, ale nie wiem czy jest to w pełni poprawne rozwiązanie.

Z góry dziękuję!

0

Ty czegoś nie rozumiesz, jeśli wpiszesz w pasku przeglądarki ciąg znaków np. jasna.dupa, to przeglądarka dopisze z przodu protokół (http://) oraz ciąg www i spróbuje się połączyć z adresem http://www.jasna.dupa. Natomiast konstruktor w klasie URL niczego nie dopisuje z przodu, Ty musisz podać poprawny adres, łącznie z protokołem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1