Como saber si existe un LINK, un archivo en internet

Iniciado por jrhomer, 10 Enero 2006, 23:49 PM

0 Miembros y 4 Visitantes están viendo este tema.

jrhomer

Hola foro.

Necesito saber si un archivo, como por ejemplo www.pepe.com/log/uno.txt, existe.

Mirando el API lo que he visto parecido es la función IsValidURL, pero no obtengo el resultado que necesito, ya que esta funcion me indica si es "correcta" la URL, pero no si existe.

por ejemplo:

http://www.pepe.com/ es una URL correcta
hrrp:/www.pepe.com/ es una URL incorrecta
http://www.pepe.com/log/noExisto.txt es una URL correcta
sin embardo el archivo /log/noExisto.txt no existe...

no se si me he explicado, creo q si.

(aquí la posteo la función IsValidURL por si alguien la necesita)

Private Const S_FALSE = &H1
Private Const S_OK = &H0
'Only implemented as unicode...
Private Declare Function IsValidURL Lib "URLMON.DLL" (ByVal pbc As Long, ByVal szURL As String, ByVal dwReserved As Long) As Long
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    MsgBox "Is valid URL: " + CStr(IsGoodURL("http://www.allapi.net"))
    MsgBox "Is valid URL: " + CStr(IsGoodURL("hxxp:/www.allapi.uhoh"))
End Sub
Public Function IsGoodURL(ByVal sURL As String) As Boolean
    'The IsValidURL always expects a UNICODE string, but whenever
    'VB calls an API function, it converts the strings to ANSI strings.
    'That's why we're going to use a trick here. Before calling the function,
    'We're going to convert the unicode string to unicode so we get a double
    'unicode string.
    'Before VB calls the API function, it converts our double unicode string
    'to a normal unicode string; exactely what IsValidURL is expecting.
    sURL = StrConv(sURL, vbUnicode)
    'Now call the function
    IsGoodURL = (IsValidURL(ByVal 0&, sURL, 0) = S_OK)
End Function
ups!!

jrhomer

he probado con :


Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
    "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, _
    ByVal szFileName As String, ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long
Public Function DownloadFile(URL As String, _
    LocalFilename As String) As Boolean
    Dim lngRetVal As Long
    lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
    If lngRetVal = 0 Then DownloadFile = True
End Function[/P]
[P]
Sub Probando()
If DownloadFile("[URL=http://www.loquesea/archivo2.pdf]www.loquesea/archivo2.pdf[/URL]", _
     "C:\mifichero.pdf") = True Then
  MsgBox "Descarga OK"
Else
  MsgBox "Error en la descarga"
End If
End Sub


pero no me interesa que se descargue el archivo,... alguien sabe como se puede comprobar sin necesidad de descargar el archivo.

un saludo.
ups!!

Kizar

Digamos k la api IsValidURL ace una comprovacion muy simple de la url yo juraria k solo se fija en los puntos k tiene la url y si empiza por http:// .

A mi tambien me interesa lo de saber si un archivo existe.

Salu2

jrhomer

Cita de: KiZaR en 11 Enero 2006, 17:23 PM
Digamos k la api IsValidURL ace una comprovacion muy simple de la url yo juraria k solo se fija en los puntos k tiene la url y si empiza por http:// .

A mi tambien me interesa lo de saber si un archivo existe.

Salu2
estoy probando con WebBrowser.... para ver si puedo cojer un error con el evento NavigateError... pero aun estoy probando, puede ser una "solución".

si sacais alguna solución no dudeis en postearla.
ups!!

Kizar

Digamos k la api par abrir uan pagina web te devuelve 0 si la pagina no existe, el caso es k cuando en un servidor no existe un archivo te redireciona a la pagina de error 404 de el sitio entonces la api te dice k si k existe.

Salu2

jrhomer

Cita de: KiZaR en 11 Enero 2006, 18:57 PM
Digamos k la api par abrir uan pagina web te devuelve 0 si la pagina no existe, el caso es k cuando en un servidor no existe un archivo te redireciona a la pagina de error 404 de el sitio entonces la api te dice k si k existe.

Salu2
a q API t refieres? a IsValidURL ? o a cual... lo digo para ver si podemos controlar lo del 0 q devuelve.
ups!!

Thaorius

Que tal si tratan de conectar con un socket al servidor y obtener el archivo?
Si el apache se los da, existe. Sino, les tirara un 404. Y si no se conecta tampoco existe.

Saludos
Si te sirvio mi aporte, encontrarás más en www.teoxstudios.com. Gracias!
Buscando un buen hosting? Click aquí

jrhomer

Cita de: M@rT1n en 11 Enero 2006, 22:01 PM
Que tal si tratan de conectar con un socket al servidor y obtener el archivo?
Si el apache se los da, existe. Sino, les tirara un 404. Y si no se conecta tampoco existe.

Saludos
no me interesa obtener el archivo, solo interesa conocer si existe o no. Esa es la duda que he planteado y que no hemos podido solucionar aun.
ups!!

Thaorius

Justamente. Haces la peticion, si te llega un 404 pues no existe, sino te llega un error ni 404 ni 403 ni 501,etc existe e = cortas.

Saludos
Si te sirvio mi aporte, encontrarás más en www.teoxstudios.com. Gracias!
Buscando un buen hosting? Click aquí

jrhomer

Cita de: M@rT1n en 11 Enero 2006, 22:01 PM
Que tal si tratan de conectar con un socket al servidor y obtener el archivo?
Si el apache se los da, existe. Sino, les tirara un 404. Y si no se conecta tampoco existe.

Saludos
no consigo cortar la descarga (antes de iniciarse) siempre q el archivo (mdb, en mi caso) existe, lo intenta descargar.

Tienes un ejemplo para guiarme?


un saludo.
ups!!