Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / System / Internet / OpenURL

Datei-Download via HTTP

Historie
11.03.2002Beispiel für Datei-Download; Hinweise auf weitere Artikel
21.05.2001Erweiterung um OpenType-Parameter (zur Proxy-Umgehung); Hinweis auf Beispiel
06.07.2000Erste Version

Einleitung

Mit der unten gezeigten OpenURL-Funktion kann eine Internet-Seite ohne Nutzung der Fehler-trächtigen Internet Controls geladen werden.

Ein Beispiel für die mehr oder weniger sinnvolle Anwendung dieser Funktion gibt es z.B. in "Atomzeit aus dem Internet".

Beachten Sie ggf. die im Artikel "Unix-Dateien bearbeiten" vorgestellten Routinen, insbesondere wenn Sie Probleme mit Zeilenvorschüben haben...

Beispiel

Mit der unten gezeigten Funktion können beliebige Dateien aus dem Internet geladen werden, also auch Bilder, Zip-Archive, etc. pp. So wird mit folgendem Code das VBTec-Logo auf die Festplatte gespeichert:

Dim s As String
s = OpenURL("http://vb-tec.de/vbtec.gif")
WriteFile "D:\Test\logo.gif", s

Die hier benutzte WriteFile-Routine ist übrigens im Artikel "Beliebigen Text speichern" zu finden.

Code

Im Deklarationsteil eines Formulars oder (besser) Standardmoduls müssen folgende API-Funktionen aus der wininet-Bibliothek bekannt gemacht werden:

'API-Deklarationen:
Private Declare Sub InternetCloseHandle Lib "wininet.dll" ( _
    ByVal hInet As Long)
Private Declare Function InternetOpenA Lib "wininet.dll" ( _
    ByVal sAgent As String, ByVal lAccessType As Long, _
    ByVal sProxyName As String, ByVal sProxyBypass As String, _
    ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrlA Lib "wininet.dll" ( _
    ByVal hOpen As Long, ByVal sUrl As String, _
    ByVal sHeaders As String, ByVal lLength As Long, _
    ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Sub InternetReadFile Lib "wininet.dll" ( _
    ByVal hFile As Long, ByVal sBuffer As String, _
    ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long)

'Enumeration für Internet:
Public Enum InternetOpenType
  IOTPreconfig = 0
  IOTDirect = 1
  IOTProxy = 3
End Enum

Die eigentliche Funktion beschränkt sich (fast ausschließlich) auf den wiederholten Aufruf der API-Funktionen:

Public Function OpenURL( _
    ByVal URL As String, _
    Optional ByVal OpenType As InternetOpenType = IOTPreconfig _
  ) As String
  Const INET_RELOAD = &H80000000
  Dim hInet As Long
  Dim hURL As Long
  Dim Buffer As String * 2048
  Dim Bytes As Long
  
  'Inet-Connection öffnen:
  hInet = InternetOpenA( _
      "VB-Tec:INET", OpenType, _
      vbNullString, vbNullString, 0)
  hURL = InternetOpenUrlA( _
      hInet, URL, vbNullString, 0, INET_RELOAD, 0)
  
  'Daten sammeln:
  Do
    InternetReadFile hURL, Buffer, Len(Buffer), Bytes
    If Bytes = 0 Then Exit Do
    OpenURL = OpenURL & Left$(Buffer, Bytes)
  Loop
  
  'Inet-Connection schließen:
  InternetCloseHandle hURL
  InternetCloseHandle hInet
End Function

© Jost Schwider, 06.07.2000-11.03.2002 - http://vb-tec.de/openurl.htm