Astuces de recherche...
Home
- Accueil & nouveautés
- Les newsgroups VB
- Téléchargements
- L'équipe
- Nous contacter
- Liens
Rubriques
- Toutes les questions
- Affichage & graphismes
- Algorithmique
- API
- Base de registre
- Bases de données
- Contrôles
- Date & heure
- Déploiement
- Divers
- Erreurs & problèmes
- Fichiers & dossiers
- Généralités
- Impression
- Internet & mails
- Math
- Multimédia
- Réseaux
- Structures de données
- Texte & strings
- VB .Net
- VB Script
- VBA
- Windows

Question 199

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 :

'
' Exemple d'utilisation de la fonction DownloadPage
'
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
    
    ' Récupération d'une page HTML
    data = Inet1.OpenURL("www.google.com")
    
    ' Récupération de données (fichier image par exemple)
    b() = Inet1.OpenURL("http://www.google.com/intl/en_ALL/images/logo.gif", icByteArray)
    
    ' Enregistrement dans un fichier
    f = FreeFile
    Open "C:\logo.gif" For Binary Access Write As #f
    Put #f, , b()
    Close #f

Avec Winsock ou équivalent

Une 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 UserControl

Cette méthode amusante est décrite dans un article de Karl E.Peterson : Simple Asynchronous Downloads

Pour Aller plus loin

Voir aussi :

Date de publication : 11 septembre 2008
Dernière modification : 11 septembre 2008
Rubriques : API, Contrôles, Internet & mails, Réseaux
Mots-clés : UrlDownloadToFile, Inet, télécharger, récupérer, page, web, http, ftp, download, downloader, charger