Bitteschön, einfacher und kürzer, dafür nicht portable.
Mein Beispiel nutzt im Prinzip die Internet Explorer dlls von Windows.
Das Beispiel von traumatic war ein Eigenbau und auch unter Linux nutzbar.
Code: Alles auswählen
#IOTPreconfig=1
#IOTDirect=2
#IOTProxy=3
#HTTP_QUERY_CONTENT_LENGTH = 5
#HTTP_QUERY_LAST_MODIFIED = 11
INET_RELOAD.l = $80000000
OpenType.l=#IOTPreconfig
URL.s="http://pb.oppitronic.de/files/zgeheim.exe"
hInet = InternetOpen_("PB@INET", OpenType, #Null, #Null, 0)
If hInet
Debug "internet ok"
hURL = InternetOpenUrl_(hInet, URL, #Null, 0, INET_RELOAD, 0)
If hURL
Debug "url ok"
Buffer.s=Space(255) : buflen.l=Len(Buffer)
ret = HttpQueryInfo_(hURL, #HTTP_QUERY_CONTENT_LENGTH, @Buffer, @buflen,0)
If ret
Debug "filesize: "+Buffer
Else
Debug "cannot get filesize"
EndIf
Buffer.s=Space(255) : buflen.l=Len(Buffer)
ret = HttpQueryInfo_(hURL, #HTTP_QUERY_LAST_MODIFIED, @Buffer, @buflen,0)
If ret
Debug "filedate: "+Buffer
Else
Debug "cannot get filesize"
EndIf
InternetCloseHandle_(hURL)
Else
Debug "url failed"
EndIf
InternetCloseHandle_(hInt)
Else
Debug "open failed"
ret=0
EndIf
Und code 2 lädt die Datei auch gleich runter.
Code: Alles auswählen
#IOTPreconfig=1
#IOTDirect=2
#IOTProxy=3
#HTTP_QUERY_CONTENT_LENGTH = 5
#HTTP_QUERY_LAST_MODIFIED = 11
INET_RELOAD.l = $80000000
OpenType.l=#IOTPreconfig
FILE.s="zgeheim.exe"
URL.s="http://pb.oppitronic.de/files/"+FILE
hInet = InternetOpen_("PB@INET", OpenType, #Null, #Null, 0)
If hInet
Debug "internet ok"
hURL = InternetOpenUrl_(hInet, URL, #Null, 0, INET_RELOAD, 0)
If hURL
Debug "url ok"
Buffer.s=Space(255) : buflen.l=Len(Buffer)
ret = HttpQueryInfo_(hURL, #HTTP_QUERY_CONTENT_LENGTH, @Buffer, @buflen,0)
If ret
Debug "filesize: "+Buffer
size=Val(Buffer)
Else
Debug "cannot get filesize"
EndIf
Buffer.s=Space(255) : buflen.l=Len(Buffer)
ret = HttpQueryInfo_(hURL, #HTTP_QUERY_LAST_MODIFIED, @Buffer, @buflen,0)
If ret
Debug "filedate: "+Buffer
Else
Debug "cannot get filesize"
EndIf
*mem=AllocateMemory(size)
Buffer.s=Space(255) : buflen.l=Len(Buffer)
Repeat
ret=InternetReadFile_(hURL, @Buffer,buflen, @Bytes)
CopyMemory(@Buffer,*mem+offset,Bytes)
offset+Bytes
;Prozentangabe wenn size query erfolgreich war
o.f=offset
s.f=size
p=o/s*100
Debug Str(p)+" %"
Until Bytes=0
If offset>=size
Debug "download ok"
If CreateFile(0,FILE)
WriteData(*mem,offset)
CloseFile(0)
Debug "write to disk ok"
EndIf
Else
Debug "problem download file"
EndIf
InternetCloseHandle_(hURL)
Else
Debug "url failed"
EndIf
InternetCloseHandle_(hInt)
Else
Debug "open failed"
ret=0
EndIf