Hallo,
der Tipp ist nicht schlecht, aber warum sollte man die Seite in eine Datei downloaden und anschließend wieder auslesen, wenn man den Inhalt der Seite doch auch direkt im RAM auslesen kann?
Dies geht z.B. mit folgendem Code in einem Modul:
Option Explicit
Private Enum dwAccessType
INTERNET_OPEN_TYPE_PRECONFIG = 0
INTERNET_OPEN_TYPE_DIRECT = 1
INTERNET_OPEN_TYPE_PROXY = 3
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4
End Enum
Private Declare Function InternetOpen Lib "wininet" _
Alias "InternetOpenW" ( _
ByVal lpszAgent As Long, _
ByVal dwAccessType As dwAccessType, _
ByVal lpszProxyName As Long, _
ByVal lpszProxyBypass As Long, _
ByVal dwFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet" _
Alias "InternetOpenUrlW" ( _
ByVal hInternet As Long, _
ByVal lpszUrl As Long, _
ByVal lpszHeaders As Long, _
ByVal dwHeadersLength As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet" ( _
ByVal hFile As Long, _
ByVal lpBuffer As Long, _
ByVal dwNumberOfBytesToRead As Long, _
lpdwNumberOfBytesRead As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" ( _
ByVal hInternet As Long) As Long
Public Function GetURLContents(ByVal URL As String) As String
Dim hInternet As Long, hURL As Long, TempLesePuffer() As Byte, URLInhalt As _
String, tempBytesRead As Long
hInternet = InternetOpen(StrPtr("Useragent" & ChrW(0)), _
INTERNET_OPEN_TYPE_DIRECT, StrPtr(ChrW(0)), StrPtr(ChrW(0)), 0)
If hInternet = 0 Then
Err.Raise -1, "InternetOpen", "Fehler beim Erstellen des" & _
"Internet-Handles.", "", ""
Else
hURL = InternetOpenUrl(hInternet, StrPtr(URL & ChrW(0)), StrPtr(ChrW( _
0)), -1, &H80000000, 0)
If hURL = 0 Then
InternetCloseHandle hInternet
Err.Raise -1, "InternetOpenUrl", "Fehler beim Erstellen des" & _
"URL-Handles."
Else
ReDim TempLesePuffer(100000) ' ~100 KB Puffer
Do
InternetReadFile hURL, VarPtr(TempLesePuffer(0)), 100000, _
tempBytesRead
If Not tempBytesRead = 0 Then URLInhalt = URLInhalt & MidB( _
TempLesePuffer, 1, tempBytesRead)
Loop While Not tempBytesRead = 0
GetURLContents = URLInhalt
InternetCloseHandle hURL
End If
InternetCloseHandle hInternet
End If
End Function Ein Aufruf
Dim sContents as String
sContents = StrConv(GetURLContents("http://checkip.dyndns.org"), vbUnicode) lädt dann direkt den Inhalt in einen String, wobei die Bytes hier unter Verwendung der lokalen ANSI-Kodierung (z.B. Cp1252) nach Unicode konvertiert werden.
Die Funktion InternetReadFile liest dabei in einen Puffer, der dann dem String hinzugefügt wird.
Diese Methode ist aber auch nur für kleinere Dateien, da der komplette Inhalt ja in den RAM geschrieben wird. Wenn man in blockweise wo anders hinschreiben will (echte Streams gibts ja in VB6 noch nicht), müsste man den Code entsprechend ändern.
Beitrag wurde zuletzt am 02.04.11 um 00:55:25 editiert. |