InternetOpen

22/05/2010 - 19:25 von Jens Müller | Report spam
Liebe Leser,

bei einem Rechner eines Nutzers kann mein Program keine Daten von meinem
Server herunterladen, obwohl ansnsten Konnektivitàt besteht. Eine
zusàtzliche Software-Firewall ist nicht installiert.

Die API-Funktion InternetOpen funktioniert noch aber InternetOpenUrl schlàgt
fehlt, err.LastDllError ist 12029 (laut MSDN: ERROR_INTERNET_CANNOT_CONNECT,
The attempt to connect to the server failed.).

Die URL ist vom Webbrowser aus jedoch erreichbar.

Um mehr Informationen zu erhalten, dachte ich dort noch zu versuchen
"InternetGetLastResponseInfo" aufzurufen, jedoch habe ich lokal bei mir
keinen Erfolg damit bei durch Angabe einer ungültigen Url erzwungenem Fehler
12029:

Private Declare Function InternetGetLastResponseInfo Lib "wininet.dll" Alias
"InternetGetLastResponseInfoA" (lpdwError As Long, ByVal lpszBuffer As
String, lpdwBufferLength As Long) As Long

Dim diag1 As Long, diag2 As String, diag3 As Long
diag2 = Space(255)
diag3 = 255
Debug.Print InternetGetLastResponseInfo(diag1, diag2, diag3)

Die Rückgabe ist 1, diag1 und diag3 sind 0, diag2 ist unveràndert.

Irgendeine Idee?

Jens
 

Lesen sie die antworten

#1 Wolfgang Badura
31/05/2010 - 15:02 | Warnen spam
Hallo Jens!
"Jens Müller" wrote in message
news:eWtzHPd%
Liebe Leser,

bei einem Rechner eines Nutzers kann mein Program keine Daten von meinem
Server herunterladen, obwohl ansnsten Konnektivitàt besteht. Eine
zusàtzliche Software-Firewall ist nicht installiert.

Die API-Funktion InternetOpen funktioniert noch aber InternetOpenUrl
schlàgt fehlt, Die URL ist vom Webbrowser aus jedoch erreichbar.



Wenn die herunterzuladenden Dateien nicht allzu groß sind, verwende ich das
Objekt
Set obj_XMLHTTP = CreateObject("Microsoft.XMLHTTP")
und dann zum Herunterladen
(Das Folgende ist ein Originalauszug aus meinem Programm, da gibt es
Listboxen, die gefüllt werden usw. Aber
die Serverantwort ist ermitelbar, und die Daten können binàr ausgegeben
werden.)
obj_XMLHTTP.Open "GET", str_url, False
obj_XMLHTTP.setRequestHeader "Content-Type", strGetContentType
obj_XMLHTTP.Send

If bTest Then Debug.Print "ResponseHeader"; vbCrLf;
obj_XMLHTTP.getAllResponseHeaders
strResponse = Split(obj_XMLHTTP.getAllResponseHeaders, vbCrLf)
lstResponse.AddItem ("Download " & str_url & ":")
For iX = 0 To UBound(strResponse) - 1 'letzte Zeile nicht
anzeigen!
lstResponse.AddItem (strResponse(iX))
Next iX

strContentType = obj_XMLHTTP.getResponseHeader("Content-Type")
strLastModified = obj_XMLHTTP.getResponseHeader("Last-Modified")
If InStr(1, strContentType, strGetContentType) Then
' es ist erstaunlich, daß die Methode ".responseBody"
' in der Lage ist, eine Byte-Tabelle zu belegen!!!
strImage = obj_XMLHTTP.responseBody
If bTest Then Debug.Print "Anzahl bytes(strImage)= ";
UBound(strImage) + 1

NumberDLFile = FreeFile()
Open strFilename For Binary As #NumberDLFile
Put #NumberDLFile, , strImage
Close #NumberDLFile
.usf

Damit umgehe ich die Internet API´s. Eine Fortschrittsanzeige gibt es
allerding nicht.
Der Fehlerfall beim Download nutzt die normale Fehlerroutine On Error.

Ich weiß, daß das keine Antwort auf Deine Frage ist, aber vielleicht ein
Gedanke zu einem etwas anderen Lösungsansatz.

Mit Gruß aus Wien
Wolfgang

Ähnliche fragen