Consigli utili per sopravvivere nel mondo dell'informatica
Scaricare una pagina web con Visual Basic .net (VB.NET)

Scaricare una pagina web con Visual Basic .net (VB.NET)

scaricare una pagina web con vb.netSe vi siete mai chiesti come fare a scaricare una pagina web con VB.Net e cercate un modo semplice e una guida pratica per farlo, siete arrivati nel posto giusto.

Il modo più semplice per scaricare una pagina web ed in generale qualsiasi file dal web (pdf, immagini, programmi eseguibili ecc.) è quello di utilizzare una Classe già presente in VB.Net chiamata WebClient. La classe WebClient ha diversi Metodi ma quelli che ci interessano maggiormente sono tre:

  • DownloadString(link) – scarica tutti i caratteri presenti nella destinazione (link) e li memorizza in una stringa. Questo metodo è adatto solamente a scaricare contenuto di tipo testuale (pagine html, asp, php, txt ecc.)
  • DownloadFile(link, percorso) – scarica il contenuto del link che può essere di qualsiasi tipo (pdf, immagini, programmi ecc.) e lo memorizza in un file indicato in percorso
  • DownloadData(link) – come il metodo precedente, ma il salvataggio del contenuto scaricato deve essere poi gestito dal programma.

Per utilizzare la classe WebClient, per prima cosa è necessario importare lo spazio dei nomi (Namespaces in inglese) che la contiene e che, nel nostro caso, si chiama  system.net:

Imports System.Net

Diventa poi banale scrivere il codice che scaricherà materialmente il file che ci interessa:


Dim Contenuto As New WebClient
Contenuto.DownloadFile(link,percorso)

Se il contenuto web che ci interessa scaricare richiede l’accesso con credenziali, un altro interessante metodo della classe WebClient ci viene in soccorso: Credentials

Il codice diventa quindi:

Imports System.Net

Dim Contenuto As New WebClient
Contenuto.Credentials = New NetworkCredential("nomeutente","password")
Contenuto.DownloadFile(link,percorso)

Come visto, scaricare una pagina web con VB.Net  con la classe WebClient è molto semplice, ma non lascia molta libertà al programmatore di intervenire nei vari step (connessione al server, creazione ed invio di una richiesta HTTP valida, lettura dello stream in risposta alla richiesta ecc.).

Per avere pieno controllo su tutte le fasi del download, è necessario utilizzare altre due classi sempre presenti nel namespace System.Net: HttpWebRequest e HttpWebResponse: vediamo rapidamente una funzione che utilizza queste classi:

Imports System.Net
Imports System.IO
Public Class Form1

    Private Sub bnStart_Click(sender As System.Object, e As System.EventArgs) Handles bnStart.Click
        Procedura()
    End Sub


    Sub Procedura()

        Dim ContenutoWeb() As Byte
        ContenutoWeb = ScaricaFileWeb("link-al-file-da-scaricare")
        My.Computer.FileSystem.WriteAllBytes("d:/filescaricato.boh", ContenutoWeb, append:=False)

    End Sub

    Public Function ScaricaFileWeb(link)
        Dim wr As HttpWebRequest
        Dim risposta As HttpWebResponse

        wr = Net.WebRequest.Create(link)
        risposta = wr.GetResponse

        Dim SourceStream As Stream
        SourceStream = risposta.GetResponseStream()
        Dim Buffer(4096) As Byte, BlockSize As Integer
        Dim TempStream As New MemoryStream
        Do
            BlockSize = SourceStream.Read(Buffer, 0, 4096)
            If BlockSize > 0 Then TempStream.Write(Buffer, 0, BlockSize)
        Loop While BlockSize > 0

        Dim FileWeb() As Byte
        FileWeb = TempStream.ToArray()
        SourceStream.Close()
        risposta.Close()

        Return FileWeb

    End Function

End Class

Il codice qui sopra, si riferisce ad una piccola applicazione Windows creata in VB.Net con un Form con un solo bottone (bnStart) che chiama una procedura che, a sua volta, utilizza la funzione più completa per scaricare una pagina da web con VB.Net.

Questo codice in realtà può scaricare sia una pagina di contenuto testuale sia qualsiasi altro tipo di file binario (pdf, immagini, programmi eseguibili ecc.)

Una piccola notazione: quello che viene scaricato dal link impostato, è un flusso dati binario, che viene poi salvato in un file: sta a noi decidere qual’è il nome del file in cui vogliamo salvare il flusso dati ricevuto, ma dobbiamo stare attenti ad impostare una estensione del file congrua con i dati che abbiamo scaricato.

Se infatti scarichiamo un’immagine e chiamiamo il file “miofile.txt”, quando andremo ad aprirlo, verrà caricato in un editor di testo, mostrando solamente geroglifici: ricordiamoci quindi di mettere sempre l’estensione giusta nel nome del file da salvare!

4 Comments

  1. salve questa procedura è molto valida e l’ho applicata con successo.
    E’ nato pero un problema… i dati che estraevo dalla pagina non compaiono più .o meglio compaiono ma non con la tua procedura.. Probabilmente vengono elaborati da qualche routine che li scrive nella pagina prima di mostrarla sul video..
    Ho trovato in giro altre procedure che fanno eseguire tutti gli script prima di far scaricare la pagina ma hanno la brutta abitudine che attendono la fine della pagina da caricare e non mi servono a molto. cosi…
    Hai una soluzione migliore?

    Sub prova()
    Dim objwebbrowser As New WebBrowser
    objwebbrowser.ScriptErrorsSuppressed = True
    objwebbrowser.Navigate(“https://www.paginaWEB”)

    AddHandler objwebbrowser.DocumentCompleted, AddressOf navigation_complete
    End Sub

    Sub navigation_complete(ByVal sender As System.Object, _
    ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)

    Dim strAuthorCode As String = sender.Document.Body.InnerText
    My.Computer.FileSystem.WriteAllText(“C:\programmi\TEST2.txt”, strAuthorCode, True)
    sender.Dispose()
    End Sub

    giuseppe

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *