Verificare l'esistenza di un dominio o di un file remoto

Corso XML
Creazione di strutture XML, XSL ed altri linguaggi eXtensible

Scritto da Luca Ruggiero nella sezione Xml

Molti servizi di Hosting mettono a disposizione un servizio di verifica della disponibilità del dominio che si intende acquistare; la maggior parte di questi offrono anche una serie di dati riguardanti il dominio esistente, il ben noto servizio di WhoIs (Chi è?). Per fare questo c'è bisogno di collegarsi ad una sorta di database comune che, il più delle volte, filtra gli accessi e potrebbe non essere felice che venga fatto uso dei propri dati. Con XMLHTTP questo problema non sussiste (o almeno non dovrebbe...) dato che la richiesta HTTP perviene attraverso una stringa di testo, e nessun File System o Firewall dovrebbero intercettarla... ma perchè fare le cose sporche?

Altri servizi utilizzano delle classi Java per captare dati da questi enormi calderoni che contengono informazioni sui domini registrati, ma di certo una richiesta via XMLHTTP è più sicura. Ad ogni modo, lo scopo di questo Articolo non è quello di implementare un reale servizio di WhoIs, ma è semplicemente didattico: sfruttare le potenzialità di XMLHTTP per lavorare con file remoti.

Abbiamo visto in questo articolo com'è possibile col File System Object verificare l'esistenza di un file... file che però deve risiedere sul server da cui viene inviata la richiesta (che definirei più una verifica): se si prova ad effettuare una verifica del genere in remoto, si incapperà in problemi di autorizzazioni ed in un sicuro insuccesso dell'operazione.

Ma allora perchè implementare un servizio che verifichi l'esistenza di un file remoto?

Posso fare decine di esempi per chiarire il perchè, ma mi limiterò a farne un paio. Qualche giorno fa stavo chiacchierando con un Webmaster mio amico (non faccio il nome per correttezza) e gli facevo notare che, sul suo sito, alcuni link a file esterni, che avrebbero dovuto contenere materiale didattico, erano errati, oppure le pagine (o file) richieste erano state rimosse, rinominate, o comunque non c'erano più e veniva generato un errore 404 non gestito... cosa abbastanza antipatica a mio parere...
Altro esempio: supponiamo di lavorare con dei file Xml remoti per reperire determinate informazioni, e supponiamo che questi file vengano spostati, rinominati o addirittura rimossi. Quando la nostra pagina Asp che fa riferimento a questi oggetti viene richiesta al server Web, genererà un errore che deve essere gestito... non possiamo fare noi brutta figura per colpa di terzi!

Ecco perchè effettuare determinate verifiche... come diceva Totò La prudenzia non è mai troppo :-)

Vediamo un esempio:

<%@LANGUAGE = JScript%>
<%
    var url = "http://www.lukeonweb.net";
    try
    {
        var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            xmlhttp.Open("GET", url, false);
            xmlhttp.Send();
        if (xmlhttp.Status != 12007)
        {
            Response.write("Dominio occupato");
        }
    }
    catch (e)
    {
        Response.Write("Dominio libero");
    }
%>
Lo script è semplice ed abbastanza intuitivo nella sua logica e nella struttura, ma esaminiamo alcune parti salienti. La variabile url definisce il dominio o il file di cui intendiamo stabilire l'esistenza, in questo caso si tratta di una costante, quindi di un qualcosa di statico, ma è molto semplice ed immediato dinamizzare l'applicazione con l'aggiunta di un modulo Html.

Utilizzo il costrutto try...catch per gestire l'errore (di cui parleremo tra poco). Istanzio l'oggetto XMLHTTP ed invio la richiesta remota. A questo punto utilizzo la proprietà Status dello stesso XMLHTTP che, se avrà valore diverso da 12007, vorrà dire che ha trovato quello che stavamo cercando in remoto, e posso lanciare il messaggio che attesta che il dominio è occupato.

Ma se il dominio o il file specifico non esistesse? Ad XMLHTTP verrebbe inviata una stringa vuota e darebbe errore! Mi creo quindi un'eccezione con la clausola catch in cui specifico che il dominio è libero.

L'esempio appena illustrato fa pensare molto da vicino ad un servizio di WhoIs; per testare la veridicità di quanto affermato, si passi alla variabile url il valore
var url = "http://www.lukeonweb.net/index.asp";
e si modifichino i Response.Write rispettivamente in Il file esiste ed Il file NON esiste.

Il file index.asp effettivamente esiste, quindi il messaggio restituito sarà positivo, ma si provi ad impostare la variabile url col valore
var url = "http://www.lukeonweb.net/pippo.asp";
e... ;-)

I più cliccati della sezione Xml

:: Estrarre dati da un file Xml con Javascript (33.347)

:: Un motore di ricerca con Xml e Javascript (25.881)

:: Applicare un foglio di stile Xsl ad un file Xml (22.254)

:: Leggere un file Xml con l'oggetto XMLDOM (18.112)

:: Introduzione all'oggetto XMLHTTP (16.951)

:: Leggere un Feed RSS con PHP (14.623)

:: Scorrere i record di un file Xml con Javascript (14.517)

:: Leggere un file Xml con Php (12.862)

:: Un sistema di login in Javascript ed Xml (11.908)

:: Applicare un foglio di stile Css ad un file Xml (11.024)

IN EVIDENZA
DOWNLOAD