Comment télécharger une page web en Visual Basic ?
Bien que VB6 ne dispose pas nativement d'une instruction ou fonction permettant de récupérer une page web ou son contenu, il est néanmoins très simple de le faire en utilisant les composants appropriés ou l'API Windows. Avec l'API "UrlDownloadToFile"Cette fonction permet de télécharger et de récupérer dans un fichier n'importe quelle ressource disponible sur Internet, page html, fichier, etc. Il est facile de créer une petite fonction VB utilisant cette API : 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
Function DownloadPage(ByVal url As String, ByVal FileName As String) As Boolean Dim done As Boolean Dim value As Long
On Error Resume Next done = True If Dir$(FileName) <> "" Then Kill FileName End If value = URLDownloadToFile(0, url, FileName, 0, 0) If Dir$(FileName) = "" Then done = False End If DownloadPage = done End Function
Et voici un exemple d'utilisation :
Private Sub Command1_Click() Dim bRet As Boolean Dim sURL As String Dim sFileName As String sURL = "http://faq.vb.free.fr/index.php?rubrique=0" sFileName = "c:\test.dat" bRet = DownloadPage(sURL, sFileName) If bRet Then MsgBox "Téléchargement réussi." Else MsgBox "Erreur lors du télécharegement" End If End Sub
Si on veut exploiter le contenu du fichier ainsi récupéré, il suffit de lire son contenu dans une variable de type String, comme indiqué par exemple dans l'article Comment lire rapidement un fichier texte ? Avec le composant "Microsoft Internet Transfer Control 6.0"Ce composant sophistiqué permet de réaliser de nombreuses tâches. Cet article présente uniquement l'une des fonctions : le téléchargement d'une page web. Pour exécuter le code suivant, il faut ajouter le composant inet au projet : dans l'IDE, menu Projets, puis Composants et ajouter "Microsoft Internet Transfer Control 6.0". L'utilisation est particulièrement simple, comme on peut le voir dans les exemples ci-dessous : Dim data As String Dim b() As Byte Dim f As Integer data = Inet1.OpenURL("www.google.com") b() = Inet1.OpenURL("http://www.google.com/intl/en_ALL/images/logo.gif", icByteArray) f = FreeFile Open "C:\logo.gif" For Binary Access Write As #f Put #f, , b() Close #f Avec Winsock ou équivalentUne autre possibilité est d'implémenter tout simplement un sous-ensemble du protocole HTTP, tel que défini dans la RFC 2616 : Hypertext Transfer Protocol -- HTTP/1.1. L'avantage immédiat est d'offrir un contrôle complet des opérations, la contrepartie étant évidemment la difficulté (toute relative) de l'implémentation. Le contrôle Winsock dispose de toutes les facilités voulues pour que l'implémentation de cette partie du protocole soit relativement aisée. On pourra aussi utiliser des classes sockets alternatives, telles que les excellentes CSocketMaster et CSocketPlus 1.1, de Emiliano Scavuzzo, disponibles en téléchargement gratuit ici : CSocketMaster 1.2 & CSocketPlus 1.1. Avec la méthode AsyncRead d'un UserControlCette méthode amusante est décrite dans un article de Karl E.Peterson : Simple Asynchronous Downloads Pour Aller plus loin Voir aussi : |