Rubrik: HTML/Internet/Netzwerk · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 29.10.01 |
MSINET: Warten, bis die Datei übertragen wurde Mit dem Microsoft Internet Transfer Control lassen sich schnell HTTP und FTP-Anfragen an einen Server schicken, aber auf eines sollte man achten... | ||
Autor: Dieter Otter | Bewertung: | Views: 23.573 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Das Microsoft Internet Transfer Control (MSINET.OCX) eignet sich hervorragend für das Downloaden von Webseiten aus dem Internet. Solange man nur eine einzige "Download-Anfrage" startet, ist das auch alles kein Problem. Sollen aber mehrere Anfragen hintereinander ausgeführt werden, so kennen auch Sie sicherlich die Fehlermeldung: Die letzte Anforderung wird noch bearbeitet.
Wir lässt sich dieses Problem nun umgehen?
Ganz einfach - beim Starten der Anfrage über die Execute-Methode wird ein Flag gesetzt. Sobald das MSINET-Control die Anfrage vollständig bearbeitet und die entsprechenden Daten übermittelt hat, wird das Flag wieder zurückgesetzt. Wir brauchen jetzt also nur das Flag innerhalb einer Schleife zu prüfen.
Das nachfolgende Beispiel zeigt, wie sich eine Webseite downloaden lässt. Die weitere Ausführung des Codes wird nun so lange "angehalten", bis die Webseite vollständig geladen wurde. Danach kann dann die nächste Anfrage gestartet werden.
Um das Beispiel auszuprobieren, erstellen Sie ein neues Projekt und fügen über Projekt - Komponenten das "Microsoft Internet Transfer Control" (MSINET.OCX) hinzu. Plazieren Sie auf die Form eine Instanz des MSINET-Controls, ein Textfeld mit der Bezeichnung txtURL, einen CommandButton cmdGO und eine MutliLine-TextBox mit der Bezeichnung txtData.
Jetzt nur noch den nachfolgenden Code einfügen und F5 drücken.
Option Explicit ' Datenvariable Dim sData As String ' Anfrage absenden (hier URL laden und Seiten-Quelltext anzeigen) Private Sub CmdGO_Click() Screen.MousePointer = 11 With Inet1 sData = "" .Tag = "Loading" .Execute txtURL.Text Do DoEvents Loop Until .Tag <> "Loading" If .Tag = "Ready" Then ' Anfrage korrekt bearbeitet ' Seiten-Quelltext anzeigen txtData.Text = sData ElseIf .Tag = "Error" Then ' Fehler MsgBox "Es ist ein Fehler aufgetreten!" End If End With Screen.MousePointer = 0 End Sub ' MSINET - Status abfragen Private Sub Inet1_StateChanged(ByVal State As Integer) Dim vData As Variant Dim bReady As Boolean With Inet1 Select Case State Case icError ' Es ist ein Fehler aufgetreten .Tag = "Error" Case icResponseCompleted ' Segment holen vData = .GetChunk(1024, icString) DoEvents Do sData = sData & vData ' Nächstes Segment holen vData = .GetChunk(1024, icString) DoEvents If Len(vData) = 0 Then bReady = True Loop Until bReady .Tag = "Ready" End Select End With End Sub