elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Descargar un archivo utilizando un proxy con autentificación en VB.NET
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Descargar un archivo utilizando un proxy con autentificación en VB.NET  (Leído 2,576 veces)
bybaal

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Descargar un archivo utilizando un proxy con autentificación en VB.NET
« en: 12 Enero 2016, 22:29 pm »

Hola a todos, he encontrado un tema muy viejo que habla sobre descargar un archivo de internet, pero no utilizaba un proxy con autentificación, que es lo que necesito y al ejemplo que se utilizó no se como combinarlo con lo que tengo, aquí les dejo ambos para ver si alguien me puede ayudar

Ejemplo del tema viejo

Código
  1. My.Computer.Network.DownloadFile("https://foro.elhacker.net/Themes/converted/selogo.jpg", "c:\1.jpg"
  2.  

Esto es lo que tengo y no se como combinarlos

Código
  1. Dim proxy As New WebProxy("proxydeprueba.com:3128", False)
  2. proxy.Credentials = New NetworkCredential("yomismo", "mipass,")
  3.  

Gracias por los aportes que puedan dar


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: Descargar un archivo utilizando un proxy con autentificación en VB.NET
« Respuesta #1 en: 13 Enero 2016, 09:55 am »

Los métodos del namespace My son útiles y sencillos ...pero limitados, trata de evitarlos.

Teniendo el web-proxy:
Código
  1. Dim proxy As New WebProxy("proxydeprueba", 3128)
  2. proxy.Credentials = New NetworkCredential("yomismo", "mipass,")

Puedes utilizar la class webclient para descargar el archivo de forma sincrónica o asíncrona para utilizar sus eventos de reporte de progreso:
Código
  1. Using wc As New WebClient
  2.    wc.Proxy = proxy
  3.    wc.DownloadFile("https://foro.elhacker.net/Themes/converted/selogo.jpg", "C:\selogo.jpg")
  4. End Using

O también la class WebRequest / HttpWebRequest:
Código
  1. Dim request As WebRequest = WebRequest.Create("https://foro.elhacker.net/Themes/converted/selogo.jpg")
  2.  
  3. With request
  4.    .Proxy = proxy
  5. End With
  6.  
  7. Using sr As Stream = (request.GetResponse.GetResponseStream)
  8.  
  9.    Using fs As FileStream = File.Create("c:\selogo.jpg")
  10.        sr.CopyTo(fs)
  11.    End Using
  12.  
  13. End Using
También puedes realizar una copia del stream por bloques si prefieres reportar el progreso de la copia en archivos grandes.



Código fuente sacado de mi API ElektroKit:


Como puedes ver, con el siguiente método se intenta evitar o automatizar la asignación de un nombre de archivo de destino, aunque no es un algoritmo perfecto.
El código original utiliza una lista de MimeTypes para una mejor detección del tipo o extensión del archivo de destino, pero la he eliminado para reducir el código que mostrarte aquí en el foro, y le añadí el parámetro del proxy.
Si descomentas las lineas de variables comentadas puedes extender el método para reportar el progreso mediante eventos.

Ejemplo de uso:
Código
  1. DownloadFile(proxy, "http://download.thinkbroadband.com/5MB.zip", "C:\")

Snippet:
Código
  1. Public Shared Sub DownloadFile(ByVal proxy As WebProxy,
  2.                               ByVal url As String,
  3.                               ByVal dirpath As String)
  4.  
  5.    Dim req As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest)
  6.    req.Proxy = proxy
  7.  
  8.    Using resp As WebResponse = req.GetResponse
  9.  
  10.        Dim filename As String = ""
  11.  
  12.        Try
  13.            filename = Path.GetFileName(resp.ResponseUri.AbsoluteUri)
  14.  
  15.        Catch ex As Exception
  16.            filename = String.Format("{0}.{1}", Path.GetFileNameWithoutExtension(Path.GetRandomFileName), "file")
  17.  
  18.        Finally
  19.            If Not Path.HasExtension(filename) Then
  20.                filename.Insert(filename.Length, ".file")
  21.            End If
  22.  
  23.        End Try
  24.  
  25.        Dim buffer As Byte() = New Byte(1023) {}
  26.        Dim bytesRead As Integer
  27.        ' Dim totalBytes As Long
  28.        ' Dim receivedBytes As Long
  29.  
  30.        Using fs As New FileStream(Path.Combine(dirpath, filename), FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read)
  31.  
  32.            Using data As Stream = resp.GetResponseStream
  33.  
  34.                ' totalBytes = data.Length
  35.                bytesRead = data.Read(buffer, 0, buffer.Length)
  36.  
  37.                While (bytesRead > 0)
  38.                    fs.Write(buffer, 0, bytesRead)
  39.                    ' receivedBytes += bytesRead
  40.                    bytesRead = data.Read(buffer, 0, buffer.Length)
  41.                End While
  42.  
  43.            End Using
  44.  
  45.        End Using
  46.  
  47.    End Using
  48.  
  49. End Sub

Saludos!


« Última modificación: 13 Enero 2016, 10:19 am por Eleкtro » En línea

bybaal

Desconectado Desconectado

Mensajes: 52


Ver Perfil
Re: Descargar un archivo utilizando un proxy con autentificación en VB.NET
« Respuesta #2 en: 16 Enero 2016, 18:31 pm »

OK, muchas gracias, funciona perfectamente.

Los métodos del namespace My son útiles y sencillos ...pero limitados, trata de evitarlos.

Teniendo el web-proxy:
Código
  1. Dim proxy As New WebProxy("proxydeprueba", 3128)
  2. proxy.Credentials = New NetworkCredential("yomismo", "mipass,")

Puedes utilizar la class webclient para descargar el archivo de forma sincrónica o asíncrona para utilizar sus eventos de reporte de progreso:
Código
  1. Using wc As New WebClient
  2.    wc.Proxy = proxy
  3.    wc.DownloadFile("https://foro.elhacker.net/Themes/converted/selogo.jpg", "C:\selogo.jpg")
  4. End Using

O también la class WebRequest / HttpWebRequest:
Código
  1. Dim request As WebRequest = WebRequest.Create("https://foro.elhacker.net/Themes/converted/selogo.jpg")
  2.  
  3. With request
  4.    .Proxy = proxy
  5. End With
  6.  
  7. Using sr As Stream = (request.GetResponse.GetResponseStream)
  8.  
  9.    Using fs As FileStream = File.Create("c:\selogo.jpg")
  10.        sr.CopyTo(fs)
  11.    End Using
  12.  
  13. End Using
También puedes realizar una copia del stream por bloques si prefieres reportar el progreso de la copia en archivos grandes.



Código fuente sacado de mi API ElektroKit:


Como puedes ver, con el siguiente método se intenta evitar o automatizar la asignación de un nombre de archivo de destino, aunque no es un algoritmo perfecto.
El código original utiliza una lista de MimeTypes para una mejor detección del tipo o extensión del archivo de destino, pero la he eliminado para reducir el código que mostrarte aquí en el foro, y le añadí el parámetro del proxy.
Si descomentas las lineas de variables comentadas puedes extender el método para reportar el progreso mediante eventos.

Ejemplo de uso:
Código
  1. DownloadFile(proxy, "http://download.thinkbroadband.com/5MB.zip", "C:\")

Snippet:
Código
  1. Public Shared Sub DownloadFile(ByVal proxy As WebProxy,
  2.                               ByVal url As String,
  3.                               ByVal dirpath As String)
  4.  
  5.    Dim req As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest)
  6.    req.Proxy = proxy
  7.  
  8.    Using resp As WebResponse = req.GetResponse
  9.  
  10.        Dim filename As String = ""
  11.  
  12.        Try
  13.            filename = Path.GetFileName(resp.ResponseUri.AbsoluteUri)
  14.  
  15.        Catch ex As Exception
  16.            filename = String.Format("{0}.{1}", Path.GetFileNameWithoutExtension(Path.GetRandomFileName), "file")
  17.  
  18.        Finally
  19.            If Not Path.HasExtension(filename) Then
  20.                filename.Insert(filename.Length, ".file")
  21.            End If
  22.  
  23.        End Try
  24.  
  25.        Dim buffer As Byte() = New Byte(1023) {}
  26.        Dim bytesRead As Integer
  27.        ' Dim totalBytes As Long
  28.        ' Dim receivedBytes As Long
  29.  
  30.        Using fs As New FileStream(Path.Combine(dirpath, filename), FileMode.CreateNew, FileAccess.ReadWrite, FileShare.Read)
  31.  
  32.            Using data As Stream = resp.GetResponseStream
  33.  
  34.                ' totalBytes = data.Length
  35.                bytesRead = data.Read(buffer, 0, buffer.Length)
  36.  
  37.                While (bytesRead > 0)
  38.                    fs.Write(buffer, 0, bytesRead)
  39.                    ' receivedBytes += bytesRead
  40.                    bytesRead = data.Read(buffer, 0, buffer.Length)
  41.                End While
  42.  
  43.            End Using
  44.  
  45.        End Using
  46.  
  47.    End Using
  48.  
  49. End Sub

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Descargar archivo FTP con un BAT
Scripting
kicking people 4 17,710 Último mensaje 12 Enero 2009, 16:28 pm
por yercodl
Archivo configuración proxy
GNU/Linux
darkvidhack 5 6,717 Último mensaje 24 Septiembre 2011, 12:28 pm
por P-Joe
Descargar archivo pdf.
Software
TR0N-21 0 1,119 Último mensaje 7 Septiembre 2012, 05:25 am
por TR0N-21
Bases de datos utilizando archivo .txt en Python.
Scripting
El mas antiguo 7 3,362 Último mensaje 14 Noviembre 2022, 21:03 pm
por El mas antiguo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines