Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Descargas HTTP

Estas en el tema de Descargas HTTP en el foro de Visual Basic clásico en Foros del Web. Hola a todos, tengo una pregunta, como puedo bajar archivos viaHTTP, osea por el puerto 80. Actualmente se bajar archivos por FTP, unicamente usas una ...
  #1 (permalink)  
Antiguo 08/01/2005, 17:36
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Descargas HTTP

Hola a todos, tengo una pregunta, como puedo bajar archivos viaHTTP, osea por el puerto 80.

Actualmente se bajar archivos por FTP, unicamente usas una API es algo asi:

Código:
Private Sub Command1_Click()

        inter = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)

        conexion = InternetConnect(inter, "172.16.123.123", INTERNET_INVALID_PORT_NUMBER, "user", "***", INTERNET_SERVICE_FTP, 0, 0)
        ret = FtpGetFile(conexion, "archivoabajar", App.Path + "\destino", 0, 0, -2147483648#, 0)
        
        InternetCloseHandle conexion
End Sub
solo se usan un par de API's ya ya, mi pregunta es como le hago para que pueda bajar archivos por el puerto 80??

thanks!!
  #2 (permalink)  
Antiguo 08/01/2005, 21:40
 
Fecha de Ingreso: enero-2005
Mensajes: 15
Antigüedad: 19 años, 3 meses
Puntos: 0
hola aqui tienes un ejemplo
Const scUserAgent = "API-Guide test program"
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_FLAG_RELOAD = &H80000000
Const sURL = "http://www.microsoft.com/index.htm"
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Sub Form_Load()
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: [email protected]

Dim hOpen As Long, hFile As Long, sBuffer As String, Ret As Long
'Create a buffer for the file we're going to download
sBuffer = Space(1000)
'Create an internet connection
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
'Open the url
hFile = InternetOpenUrl(hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
'Read the first 1000 bytes of the file
InternetReadFile hFile, sBuffer, 1000, Ret
'clean up
InternetCloseHandle hFile
InternetCloseHandle hOpen
'Show our file
MsgBox sBuffer
End Sub
  #3 (permalink)  
Antiguo 09/01/2005, 02:16
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Ok, gracias por responder... solo una duda!!

El archivo se queda en el sBuffer, ahora, como haga para guardarlo?? como lo "escribo" en el HD??

Por ejemplo, necesito bajar un ejecutable, como lo guardo en la computadora, pues con ese codigo unicamente lo tengo en una variable, como puedo guardarlo permanentemente!!

gracias!!
  #4 (permalink)  
Antiguo 09/01/2005, 09:40
 
Fecha de Ingreso: enero-2005
Mensajes: 15
Antigüedad: 19 años, 3 meses
Puntos: 0
el ejemplo que postie solo se descarga los primero 1000 bytes de una página
y para descargarlo completamente tienes que hacer esta midificafícacion
dim intCanal as integer
intCAnal=freefile
open DireccionArchivo for binary as #intCanal
do
sbuffer=space(2024)
InternetReadFile hFile, sBuffer, 2024, Ret
'la variable ret devuelve la cantidad de datos escritos en la variable sBuffer
'si devuelve 0 es que termino la descarga
doevents
if ret >0 then
put #intCanal, sbuffer
end if
loop while ret >0
close #intcanal
usa la instrucción open para abrir un archivo y vas guardando los datos de la
variable sbuffer
  #5 (permalink)  
Antiguo 10/01/2005, 20:01
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Thanks man!!

pero el ultimo codigo que pusiste marca un error de compilacion:
Código:
Dim intCanal As Integer
intCanal = FreeFile
Open "download.exe" For Binary As #intCanal
Do
sBuffer = Space(2024)
InternetReadFile hFile, sBuffer, 2024, Ret
DoEvents
If Ret > 0 Then
    'Exactamente en esta linea marca lo siguiente: "Se esperaba: Separador de listas"
    Put #intCanal, sBuffer
End If
Loop While Ret > 0
Close #intCanal

End Sub
pues, que esta mal?? cuales listas?? que separadores??
  #6 (permalink)  
Antiguo 11/01/2005, 00:00
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
OK, Ya esta funcionando a la perfeccion...

THANKS MAN!!

el codigo quedo asi:
Código:
Const scUserAgent = "API-Guide test program"
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_FLAG_RELOAD = &H80000000
Const sURL = "http://www.ciberstock.com/descargame.exe"
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long



Private Sub Command1_Click()

Dim hOpen As Long, hFile As Long, sBuffer As String, Ret As Long
Dim intCanal As Integer
intCanal = FreeFile

Open "download.exe" For Binary As #intCanal

hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
hFile = InternetOpenUrl(hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)

sBuffer = Space(2024)

Do
    InternetReadFile hFile, sBuffer, 2024, Ret
    If Ret > 0 Then
        Put #intCanal, , sBuffer
    End If
    DoEvents
Loop While Ret > 0

InternetCloseHandle hFile
InternetCloseHandle hOpen

Close #intCanal
End Sub
Pongo el codigo por si a alguien le sirve!!

bytes!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:44.