jueves, enero 10, 2013

Saber si una URL existe

 

En el Foro de la Comunidad de Visual FoxPro en Español, se tocó el tema, y bueno, se logra el objetivo con el siguiente código:

?ExisteURL("http://www.webservicex.net/globalweather.asmx?WSDL")
?ExisteURL("http://www.noexiste.net/")

*-----------------------------------------------------
FUNCTION ExisteURL(tcURL)
*-----------------------------------------------------
* Esta función se utiliza para saber si una URL existe
* o está funcionando en este momento, utiliza cURL.exe
* para realizarlo (http://curl.haxx.se/)
*
* Recibe de parámetro la url a validar y regresa un
* lógico que indica si se encontró la URL o no.
*-----------------------------------------------------

    IF !FILE("curl.exe")
        * --- Debes tener el cURL y sus dlls en el directorio de trabajo ---
        RETURN .F.
    ENDIF

    lRet = .F.
    * --- Se declara una variable que contendría el contenido de la página web o wsdl ---   
    sFile = ADDBS(SYS(2023)) + SYS(2015)+".txt"
    * --- Se prepara un bat que invoca al cURL ---
    TEXT TO xBAT NOSHOW ADDITIVE TEXTMERGE PRETEXT 7
    echo off
    cd <<SYS(5)+CURDIR()>>
    curl.exe <<ALLTRIM(tcURL)>> >> <<sFile>>
    ENDTEXT
    * --- Se almacena en un bat ---
    uidBat = ADDBS(SYS(2023)) + SYS(2015) + [.bat]
    STRTOFILE(xBAT,uidBat)
    * --- Ejecutamos el bat ---
    oShell = createobject("WScript.Shell")
    oShell.Run(uidBat,0,.T.)
    RELEASE oShell
    DELETE FILE (uidBat)   
    * --- Si no creo el archivo resultado ocurrió un error con cURL ---
    IF !FILE(sFile)
        lRet = .F.
    ELSE
        * --- Si existe el archivo y su longitud es diferente de 0, la url existe! ---
        lcFile = FILETOSTR(sFile)
        lRet = (LEN(lcFile) > 0 )
        DELETE FILE (sFile)
    ENDIF
    RETURN lRet   
ENDFUNC
*-----------------------------------------------------

El código compelto con cURL utilizado se puede descargar desde acá.

No hay comentarios.: