Alguien sabria decirme Como puedo bajar un Archivo de una Pagina web con el winsock o llamando a una Api's.porfavor si alguien puede ayudarme GRACIAS...
usando el control "inet"
vas a menu proyecto>componentes y buscas/activas el "Microsoft Internet transfer"
y aki te doy un code que encontre por ahi...
Citar
Mediante el control Inet (Internet Transfer control), podemos descargar un archivo desde una dirección Url (archivo de texto o binario) y mostrar el progreso de descarga en una Progress bar. En este ejemplo se descarga desde la página de Softonic el programa Warez.exe y se vá mostrando el progreso
Colocar 1 control Inet y 1 progress bar. El archivo se guarda en la carpeta donde se ejecute el programa.
necesitas un Control Inet, un Progress, un command
Private Sub Command1_Click()
ProgressBar1.Value = 0
Inet1.AccessType = icUseDefault
Inet1.URL = "http://download.warezclient.com/WarezP2P_DLC.exe"
Inet1.Execute , "GET" 'Indicamos que vamos a descargar o recuperar un _
archivo desde una url
End Sub
Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim vtData As Variant 'acá almacenamos los datos
Select Case State
Case icResponseCompleted
Dim bDone As Boolean: bDone = False
Dim tempArray() As Byte ' Un array para grabar los datos en un archivo
'Para saber el tamaño del fichero en bytes
filesize = Inet1.GetHeader("Content-length")
'Establecemos el Max del = a al tamaño del archivo
ProgressBar1.Max = filesize
contenttype = Inet1.GetHeader("Content-type")
'Creamos y abrimos un nuevo archivo en modo binario
Open App.Path + "\WarezP2P_DLC.exe" For Binary Access Write As #1
' Leemos de a 1 Kbytes. El segundo parámetro indica _
el tipo de fichero. Tipo texto o tipo Binario, en este caso _
binario
vtData = Inet1.GetChunk(1024, icByteArray)
DoEvents
'Si el tamaño del fichero es 0 ponemos bDone en True para que no _
entre en el bucle
If Len(vtData) = 0 Then
bDone = True
End If
Do While Not bDone
'Almacenamos en un array el contenido del archivo
tempArray = vtData
'Escribimos el archivo en disco
Put #1, , tempArray
'Aumentamos la barra
ProgressBar1.Value = ProgressBar1.Value + Len(vtData) * 2
' Leemos de pedazos de a 1 kb (1024 bytes)
vtData = Inet1.GetChunk(1024, icByteArray)
DoEvents
If Len(vtData) = 0 Then
bDone = True
End If
Loop
Close #1
ProgressBar1.Value = 0
End Select
End Sub
el autor se llama luciano
dando un poco de "extras" al codigo de luciano se me ha ocurrido para ponerlo mas guapo el poder calcular el porcentaje de descarga y colocarlo en un label:
prog = (ProgressBar1.Value + Len(vtData) * 2) / 1000000
Label1.Caption = prog & "MB"
lo divido en / 1000000 para que te salga en Megabytes y no en Bytes
igualmente para obtener el tamaño total del archivo:
filesize = Inet1.GetHeader("Content-length")
Label2.Caption = (filesize / 1000000) & " MB"
y nada mejor como tener la opcion de descargar no solo ese archivo y colocar la url de la descarga en un textbox y que este se descargue al presionar un command:
Private Sub Command1_Click()
If Text1.Text = "" Then
MsgBox ("Introduce la url del archivo que quieres descargar!")
Else
ProgressBar1.Value = 0
Inet1.AccessType = icUseDefault
Inet1.URL = Text1.Text
Inet1.Execute , "GET"
End If
End Sub
saludox
P.D. postea acerca de visual basic en el foro de visual basic valga la redundancia :P
http://foro.elhacker.net/index.php/board,50.0.html
A mi interesa una cosa mas de esto, ¿como se envian cookies con Inet?
Lo consigo con
Inet1.Execute , "GET", , "Cookie : yo"
pero no me va bien, me envia 2 veces la cabecera cookies: con contenido del IE supongo y la mia cookie : con lo mio
Inet1.Execute , "GET", , "Cookie: yo"
asi no se envia mi cookie solo la de IE
Y esto mismo pasa con los webbrowser
Ayuda.. :-\
¿Quieres que la descarga sea invisible? :huh:
Citar
'Codigo de RANEFI
Option Explicit
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
Dim ERROR_SUCCESS
Private Sub Command1_Click()
Dim sSourceUrl As String
sSourceUrl = "http://mx.geocities.com/" & _
"posotroranefi/msnmsgr.zip"
DownloadFile sSourceUrl, "C:\ranefi.zip"
End Sub
Private Function DownloadFile(ByVal sURL As String, ByVal sLocalFile As String) As Boolean
DownloadFile = URLDownloadToFile(0, sURL, _
sLocalFile, 0, 0) = ERROR_SUCCESS
End Function
O si quieres visible:
'Codigo RANEFI
Option explicit
Private Declare Function DoFileDownload Lib "shdocvw.dll" _
(ByVal lpszFile As String) As Long
Private Sub Command1_Click()
DoFileDownload _
StrConv("http://mx.geocities.com/posotroranefi/msnmsgr.zip", vbUnicode)
End Sub
Gracias pero al final lo hize con winsock ;D
he encontrado esto por casualidad, lo dejo aquí como NOTA :D y para que alguien lo pruebe.
un saludo.
Esta clase sirve para descargar cualquier archivo de un servidor web, tanto una p�gina como cualquier otro tipo de archivo (.zip, etc). La clase provee de un evento cada vez que descarga un bloque de byes que permite saber el tama�o del documento a descargar, el tama�o que ya hemos descargado, el porcentaje que ya hemos descargado (lo que permite mostrar un barra de progreso de la descarga), el tiempo transcurrido y restante, la velocidad en KB/seg y cancelar la misma en cualquier momento.
El funcionamiento es sencillo, como se ve en el programa de ejemplo.
PROPIEDADES
BytesBloqueDescarga : Devuelve o establece el tama�o de cada bloque que se descarga de internet. No conviene que sea demasiado grande porque se tardar� m�s en poder cancelar una descarga y en mostrar el porcentaje descargado. Su valor por defecto es 512.
ContenidoDescargado : Devuelve el contenido descargado de internet si se dej� en blanco la propiedad Fichero.
Fichero : Devuelve o establece el nombre del fichero donde se guardar� el contenido descargado. Si se deja en blanco el contenido descargado se devolver� en la propiedad ContenidoDescargado.
HuboError : Devuelve si la operaci�n caus� un error. Consultar StatusCode y StatusText para m�s informaci�n.
NoUsarProxy : Establece la lista de direcciones para las que no se usar� el proxy a usar. Si se deja vac�a se usar� la configuraci�n predeterminada del sistema.
Password : Devuelve o establece la password con la que se realizar� la conexi�n.
Puerto : Puerto que se utilizar� para la conexi�n. Si no se rellena se utilizar� el puerto por defecto seg�n el protocolo.
QContentLength : Devuelve o establece si deseamos recuperar la cabecera CONTENT_LENGTH
QContentLengthStr : Devuelve la informaci�n de la cabecera CONTENT_LENGTH, si la propiedad QContentLength as true.
QContentType : Devuelve o establece si deseamos recuperar la cabecera CONTENT_TYPE
QContentTypeStr : Devuelve la informaci�n de la cabecera CONTENT_TYPE si la propiedad QContentType es true.
QExpires : Devuelve o establece si queremos obtener el valor de la cabeceraEXPIRES.
QExpiresStr : Devuelve el valor de la cabecera EXPIRES si el valor de QExpires es true.
QForwarded : Devuelve o establece si deseamos recuperar la cabecera FORWARDED.
QForwardedStr : Devuelve el contenido de la cabecera FORWARDED si la propiedad QForwarded es true.
QLastModified : Devuelve o establece si deseamos recuperar la cabecera LAST_MODIFIED
QLastModifiedStr : Devuelve el valor de la cabecera LAST_MODIFIED si la propiedad QLastModified es true.
QPragma : Devuelve o establece si deseamos recuperar la cabecera PRAGMA.
QPragmaStr : Devuelve el valor de la cabecera PRAGMA si la propiedad QPragma es true.
QRawHeaders : Devuelve o establece si deseamos recuperar la cabecera RAW_HEADERS.
QRawHeadersCrLf : Devuelve o establece si deseamos recuperar la cabecera RAW_HEADERS_CRLF.
QRawHeadersCrLfStr : Devuelve el valor de la cabecera RAW_HEADERS_CRLF si la propiedad QRawHeadersCrLf es true.
QRawHeadersStr : Devuelve el valor de la cabecera RAW_HEADERS si la propiedad QRawHeaders es true.
QRequestMethod : Devuelve o establece si deseamos recuperar la cabecera REQUEST_METHOD.
QRequestMethodStr : Devuelve el valor de la cabecera REQUEST_METHOD si la propiedad QRequestMethod es true.
QServer : Devuelve o establece si deseamos recuperar la cabecera SERVER.
QServerStr : Devuelve el valor de la cabecera SERVER si la propiedad QServer es true.
QVersion : Devuelve o establece si deseamos recuperar la cabecera VERSION.
QVersionStr : Devuelve el valor de la cabecera VERSION si la propiedad QVersion es true.
StatusCode : Devuelve el c�digo de error.
<>StatusText : Devuelve la descripci�n del error.
URL : Devuelve y establece la URL que queremos descargar.
UsarProxy : Establece la lista de proxys a usar. Si se deja vac�a se usar� la configuraci�n predeterminada del sistema.
Usuario : Devuelve o establece el usuario con el que se realizar� la conexi�n.
METODOS
Descargar : Descarga la informaci�n y/o el contenido solicitado. Para determinar qu� informaci�n descargar revise las propiedades que comienzan con Q.
EVENTOS
Progreso : Este evento informa de los bytes totales del documento que estamos descargando (-1 si el tama�o es desconocido), los bytes que llevamos descargados, el porcentaje que esto representa, los segundos transcurridos, los segundos restantes (a la velocidad de descarga actual) y la velocidad de descarga en bytes por segundo.
Si ponemos el par�metro Cancelar a true se cancela la descarga.
Download jrdownload.zip
He encontrado otra manera m�s sencilla de bajar un fichero de internet.
Declaramos :
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
Y, simplemente :
Dim j As Long
j = URLDownloadToFile(0, "http://www.microsoft.com/ms.htm", _
"c:\temp\ms.htm", 0, 0)
If j = 0 Then
'el fichero se descarg� correctamente
Else
'ha ocurrido un error
End If
Si queremos que se muestre el di�logo del IExplorer y que luego nos pregunte el nombre del archivo de destino :
Declare Function DoFileDownload Lib "shdocvw.dll" (ByVal lpszFile As String) As Long
Dim Url as string
'Convertimos la URL a Unicode
Url = StrConv("http://www.microsoft.com/ms.htm', vbUnicode)
DoFileDownload Url
En este caso no s� c�mo saber si la descarga es correcta porque en las pruebas que hice la funci�n siempre devuelve 0.
Si necesitamos especificar un usuario y una password (por ejemplo para un servidor ftp) los incluiremos en la URL de la siguiente manera : para bajer el fichero "mifichero.zip" del servidor "ftp.telecable.es" con el usuario "usuario" y la password "password" debes poner en la URL : "ftp://usuario:password@ftp.telecable.es/mifichero.zip"
Podemos descargar un fichero desde internet (por http, ftp o gopher) f�cilmente usando el API.
Para ello declaramos :
Const scUserAgent = "PonTuNombreAqui"
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_FLAG_RELOAD = &H80000000
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
Y empleamos una funci�n como esta :
Function BajarFichero(sURL As String, sFichero As String, Optional sProxy As String = vbNullString, Optional sNoProxy As String = vbNullString) As Boolean
'sURL = direcci�n del fichero a bajar
'
'sFichero = nombre del fichero en el pc
'
'sProxy = direcci�n del proxy si es necesario. si no se pone lee la informaci�n del registro
'no poner una cadena vac�a
'
'sNoProxy = lista de nombres y/o ip's para las que no se usar� proxy. si ponemos s�lo "" no se usar�
'el proxy para direcciones que no contengan un punto. no poner una cadena vac�a
'
Dim hOpen As Long, hFile As Long, sBuffer As String, Ret As Long, Res As Integer
Dim Fich As Integer, aux As String
'Crear buffer para recibir el fichero
sBuffer = Space(1000)
BajarFichero = False
'Crear una conexi�n a internet
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, sProxy, sNoProxy, 0)
If hOpen = 0 Then Exit Function
'Abrir la url
hFile = InternetOpenUrl(hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
If hFile = 0 Then Exit Function
'abrimos el fichero en local
Fich = FreeFile()
If Dir(sFichero) <> "" Then Kill sFichero
Open sFichero For Binary As Fich
Res = 1: Ret = 1000
While Res = 1 And Ret = 1000
Res = InternetReadFile(hFile, sBuffer, 1000, Ret)
If Ret > 0 Then
aux = Left(sBuffer, Ret)
Put Fich, , aux
End If
Wend
'cierro el fichero
Close Fich
'cierro la conexi�n
InternetCloseHandle hFile
InternetCloseHandle hOpen
BajarFichero = True
End Function
Para descargar un fichero simplemente debemos hacer :
bResultado= BajarFichero("URL del fichero","c:\NombreFichero")
La funci�n tambi�n admite como par�metros el nombre o direcci�n de un proxy y la lista de m�quinas a las que no iremos por proxy. Estos par�metros no deben indicarse si no se utilizan.
Si necesitamos especificar un usuario y una password (por ejemplo para un servidor ftp) los incluiremos en la URL de la siguiente manera : para bajer el fichero "mifichero.zip" del servidor "ftp.telecable.es" con el usuario "usuario" y la password "password" debes poner en la URL : "ftp://usuario:password@ftp.telecable.es/mifichero.zip"
Cita de: sp26 en 18 Diciembre 2006, 01:20 AM
¿Quieres que la descarga sea invisible? :huh:
Citar
'Codigo de RANEFI
Option Explicit
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
Dim ERROR_SUCCESS
Private Sub Command1_Click()
Dim sSourceUrl As String
sSourceUrl = "http://mx.geocities.com/" & _
"posotroranefi/msnmsgr.zip"
DownloadFile sSourceUrl, "C:\ranefi.zip"
End Sub
Private Function DownloadFile(ByVal sURL As String, ByVal sLocalFile As String) As Boolean
DownloadFile = URLDownloadToFile(0, sURL, _
sLocalFile, 0, 0) = ERROR_SUCCESS
End Function
O si quieres visible:
'Codigo RANEFI
Option explicit
Private Declare Function DoFileDownload Lib "shdocvw.dll" _
(ByVal lpszFile As String) As Long
Private Sub Command1_Click()
DoFileDownload _
StrConv("http://mx.geocities.com/posotroranefi/msnmsgr.zip", vbUnicode)
End Sub
Hola, soy nuevo en el foro, tenía problemas con la función
URLDownloadToFile, no me descargaba nada, me gustaría dejar asentado que mi problema era porque en la ruta de destino no le estaba ingresanod el nombre de un archivo, es decir:
MAL: C:\Prueba1\
BIEN: C:\Prueba1\Prueba.txt
Muchas gracias me ha sido de gran ayuda este foro.
no te compliques por tanto usa la API
URLDownloadToFile
para que reviviste un post de 2 años??
yo no revivi!:S.. ya lo revivio otro! y no me di cuenta de la fecha!xD... pero NO lo revivi yo!
Cita de: Nano_Ramone en 28 Julio 2008, 23:47 PM
Cita de: sp26 en 18 Diciembre 2006, 01:20 AM
¿Quieres que la descarga sea invisible? :huh:
Citar
'Codigo de RANEFI
Option Explicit
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
Dim ERROR_SUCCESS
Private Sub Command1_Click()
Dim sSourceUrl As String
sSourceUrl = "http://mx.geocities.com/" & _
"posotroranefi/msnmsgr.zip"
DownloadFile sSourceUrl, "C:\ranefi.zip"
End Sub
Private Function DownloadFile(ByVal sURL As String, ByVal sLocalFile As String) As Boolean
DownloadFile = URLDownloadToFile(0, sURL, _
sLocalFile, 0, 0) = ERROR_SUCCESS
End Function
O si quieres visible:
'Codigo RANEFI
Option explicit
Private Declare Function DoFileDownload Lib "shdocvw.dll" _
(ByVal lpszFile As String) As Long
Private Sub Command1_Click()
DoFileDownload _
StrConv("http://mx.geocities.com/posotroranefi/msnmsgr.zip", vbUnicode)
End Sub
Hola, soy nuevo en el foro, tenía problemas con la función URLDownloadToFile, no me descargaba nada, me gustaría dejar asentado que mi problema era porque en la ruta de destino no le estaba ingresanod el nombre de un archivo, es decir:
MAL: C:\Prueba1\
BIEN: C:\Prueba1\Prueba.txt
Muchas gracias me ha sido de gran ayuda este foro.
No vuelvan a revivir post viejos o si no te va ir un tipo con un pene de 3 metros y te lo va a meter por el or..
Cita de: BADBYTE-K en 22 Mayo 2005, 22:47 PM
usando el control "inet"
vas a menu proyecto>componentes y buscas/activas el "Microsoft Internet transfer"
y aki te doy un code que encontre por ahi...
Citar
Mediante el control Inet (Internet Transfer control), podemos descargar un archivo desde una dirección Url (archivo de texto o binario) y mostrar el progreso de descarga en una Progress bar. En este ejemplo se descarga desde la página de Softonic el programa Warez.exe y se vá mostrando el progreso
Colocar 1 control Inet y 1 progress bar. El archivo se guarda en la carpeta donde se ejecute el programa.
necesitas un Control Inet, un Progress, un command
Private Sub Command1_Click()
ProgressBar1.Value = 0
Inet1.AccessType = icUseDefault
Inet1.URL = "http://download.warezclient.com/WarezP2P_DLC.exe"
Inet1.Execute , "GET" 'Indicamos que vamos a descargar o recuperar un _
archivo desde una url
End Sub
Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim vtData As Variant 'acá almacenamos los datos
Select Case State
Case icResponseCompleted
Dim bDone As Boolean: bDone = False
Dim tempArray() As Byte ' Un array para grabar los datos en un archivo
'Para saber el tamaño del fichero en bytes
filesize = Inet1.GetHeader("Content-length")
'Establecemos el Max del = a al tamaño del archivo
ProgressBar1.Max = filesize
contenttype = Inet1.GetHeader("Content-type")
'Creamos y abrimos un nuevo archivo en modo binario
Open App.Path + "\WarezP2P_DLC.exe" For Binary Access Write As #1
' Leemos de a 1 Kbytes. El segundo parámetro indica _
el tipo de fichero. Tipo texto o tipo Binario, en este caso _
binario
vtData = Inet1.GetChunk(1024, icByteArray)
DoEvents
'Si el tamaño del fichero es 0 ponemos bDone en True para que no _
entre en el bucle
If Len(vtData) = 0 Then
bDone = True
End If
Do While Not bDone
'Almacenamos en un array el contenido del archivo
tempArray = vtData
'Escribimos el archivo en disco
Put #1, , tempArray
'Aumentamos la barra
ProgressBar1.Value = ProgressBar1.Value + Len(vtData) * 2
' Leemos de pedazos de a 1 kb (1024 bytes)
vtData = Inet1.GetChunk(1024, icByteArray)
DoEvents
If Len(vtData) = 0 Then
bDone = True
End If
Loop
Close #1
ProgressBar1.Value = 0
End Select
End Sub
el autor se llama luciano
Está muy bien el uso del Control Internet Transfer para una conexión a internet directa, pero como pudiera hacerlo con dicho control si la conexión es mediante un proxy que requiere autentificación. :huh: :huh: :huh: