- Come scaricare un file da Internet -
 
COSA SERVE PER QUESTO TUTORIAL
Download | Chiedi sul FORUM | Glossario Conoscenze basilari di Visual Basic .Net - un compilatore per VB .Net
In pochi passi come ottenere in una stringa il responso di una richiesta HTTP

L'OGGETTO SYSTEM.NET.WEBCLIENT
Oggetto che permette di interagire col Web via HTTP

Il framework .Net mette a disposizione un oggetto che permette di accedere con molta semplicità a contenuti on-line via HTTP dato l'URL. Questo oggetto si trova all'interno dello spazio di nomi System.Net e si chiama WebClient. Vediamo come si può scaricare il responso di un URL (nel formato, ad esempio http://www.arcadiaclub.com/programmazione.htm):

Class DownloadURL
	Public Sub New()
		Dim wbcDownloader As New System.Net.WebClient() 'Creiamo l'oggetto WebClient
		'Dichiariamo un array di Byte dove verrà copiato i dati ricevuti
		Dim bytDatiRicevuti As Byte()
		'Eseguiamo la richiesta HTTP
		bytDatiRicevuti = wbcDownloader.DownloadData("http://www.arcadiaclub.com/programmazione.htm")
		Dim strRisultato As String
		'Trasferiamo tutti i Byte in una stringa con la codifica latin-1
		strRisultato = System.Text.Encoding.GetEncoding("iso-8859-1").GetString(bytDatiRicevuti)
		MsgBox(strRisultato)
	End Sub
End Class

Attraverso la funzione DownloadData dell'oggetto WebClient possiamo ottenere sincronamente il responso della richiesta HTTP; esso però viene restituito sotto forma di array di Byte ognuno dei quali rappresenta un carattere: come spiegato nel codice, per trasformare questo array di Byte in una stringa di testo si utilizza lo spazio di nomi System.Text, oggetto Encoding che attraverso il metodo GetEncoding permette di trasformare dei byte in testo con la codifica specificata (iso-8859-1, o latin-1, è la codifica più utilizzata per rappresentare i caratteri dell'Europa Occidentale).

SALVARE DIRETTAMENTE IL FILE SCARICATO SUL PC
Utilizzo del metodo DownloadFile

Grazie a WebClient è anche possibile con poche istruzioni scaricare un file e salvarlo direttamente sul computer locale:


Class SaveURL
	Public Sub New()
		Dim wbcDownloader As New System.Net.WebClient()	'Creiamo l'oggetto WebClient
		'Eseguiamo la richiesta e salviamo in C:\Ciao.htm
		wbcDownloader.DownloadFile("http://www.arcadiaclub.com/programmazione.htm", "C:\Ciao.htm")
	End Sub
End Class

La funzione DownloadFile riceve un parametro ulteriore rispetto a DownloadData: l'indirizzo locale del file (in questo caso C:\Ciao.htm) in cui si desidera salvare il responso. Inoltre come si può vedere questo metodo non restituisce nulla.

GESTIRE IN MANIERA AVANZATA IL FLUSSO DI DATI
Utilizzo del metodo OpenRead per avere pieno controllo sullo Stream di dati

Se utilizzare uno dei due metodi sopra descritti lascia troppo poco controllo per le vostre esigenze sulla ricezione dei dati, allora è meglio utilizzare il metodo WebClient.OpenRead: esso prende come parametro (come nelle precedenti due funzioni) l'URL da scaricare e restituisce un oggetto System.IO.Stream (che nell'esempio che segue, per comodità, trasformeremo in uno StreamReader):


Class OpenURLStream
	Public Sub New()
		Dim wbcDownloader As New System.Net.WebClient() 'Creiamo l'oggetto WebClient
		'Eseguiamo la richiesta e impostiamo stmDati sul flusso di dati restituito
		Dim stmDati As New System.IO.StreamReader(wbcDownloader.OpenRead("http://www.arcadiaclub.com/programmazione.htm"))
		Dim strRisultato As String 'Stringa dove verrano memorizzati i dati del flusso
		strRisultato = stmDati.ReadToEnd() 'Legge tutti i dati del flusso e li memorizza nella stringa
		stmDati.Close() 'Chiude il flusso di dati
		MsgBox(strRisultato)
	End Sub
End Class

Creato l'oggetto WebClient, dichiariamo e inizializziamo (attraverso New) uno StreamReader (lettore di flusso di dati) e come parametri passiamo il risultato della funzione OpenRead. Dichiarata la stringa adibita a ricevere i dati dal flusso (strRisultato), richiamiamo ReadToEnd, che legge i dati dal flusso fino alla fine, e poi chiudiamo lo StreamReader attraverso StreamReader.Close. Naturalmente attraverso l'oggetto StreamReader è anche possibile utilizzare funzioni più avanzate;ad esempio per leggere un singolo Byte si usa il metodo ReadByte mentre per un numero specificato di Byte il metodo Read.
 

<< INDIETRO by VeNoM00