 |
Publicité
|
Cette article est consacré à la récupération de documents via internet.
Je ne parle pas de téléchargement, mais d'un script PERL et d'un Source Visual Basic qui permetent de mettre le contenu d'un document dont vous connaissez l'URL dans une variable, à vous d'en faire ce que vous voulez.
Vous souhaitez récupérer sur internet un document pour pouvoir le traité de façon automatique.
Rien de plus simple, les codes suivants interrogent le serveur, sur lequel se trouve le document, en se faisant passer pour Microsoft Internet Explorer sous Windows 98 ou autres.
Le serveur renvoi donc une page comme si vous naviguiez sur le net, et pas une page spécifique pour les robots.
Le résultat est stocké dans une variable, après c'est à vous de jouer.
Vous pouvez récupérer n'importe quel document, HTML, Image, Une feuille de calcul Excel... (du moment qu'il est accessible pour un navigateur, il l'est pour ces codes)
Le source Visual Basic:
Function GetHTTPFile(ByVal URL As String, ByVal StrUserAgent As String) As String
' URL correspond au chemin complet du document exemple: http://www.domaine.ext/répertoire/ document.pl?Param=Exemple&Param2=test
' StrUserAgent correspond à la définition du navigateur exemple: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Dim hSession As Long
Dim hUrlFile As Long
Dim bBoucle As Boolean
Dim sReadBuf As String * 4096
Dim Buffer As String
Dim OctetsLus As Long
Screen.MousePointer = vbHourglass
' Ouverture de la session
hSession = InternetOpen(StrUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
' Envoi de la demande
hUrlFile = InternetOpenUrl(hSession, URL, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
' La réponse arrive par paquet, il faut donc reconstituer le document
Buffer = ""
bBoucle = True
While bBoucle And hUrlFile > 0
DoEvents
sReadBuf = ""
bBoucle = InternetReadFile(hUrlFile, sReadBuf, 4096&, OctetsLus)
Buffer = Buffer + Left$(sReadBuf, OctetsLus)
If OctetsLus = 0 Then bBoucle = False
Wend
' Il faut toujours refermer ce que l'on ouvre
InternetCloseHandle (hUrlFile)
InternetCloseHandle (hSession)
Screen.MousePointer = 0
GetHTTPFile = Buffer
End Function
Il ne vous reste donc qu'a appeler la fonction
MonDocument = GetHTTPFile("http://www.domaine.ext/répertoire/ document.pl?Param=Exemple", "Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)");
Et a interpréter MonDocument
N'oubliez pas de déclarer les fonctions et les variables :
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxyName As String, _
ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long
Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Public Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" _
(ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, _
ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Public Declare Function InternetReadFile Lib "wininet.dll" _
(ByVal hFile As Long, ByVal lpBuffer As String, ByVal dwNumberOfBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer
Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0 ' utiliser info de config de la base de registre
Public Const INTERNET_FLAG_EXISITING_CONNECT = &H20000000
Public Const INTERNET_FLAG_RELOAD = &H80000000 ' read from wire even if locally cached
Télécharger le source
|