Datei aus Dem internet Downaloaden BMAX
Übersicht

![]() |
Mathias-KwiatkowskiBetreff: Datei aus Dem internet Downaloaden BMAX |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi ich versuche eine datei aus dem www herunterzuladen, es geht halb danach smirrt er mir ab, warum?
hier der code, die datei gibt es wirklich! Code: [AUSKLAPPEN] Global SendSocket:TSocket
Download("http://purechannel.ath.cx/bmp.bmp","C:\bmp.bmp", 80) End Function Download(Inputfile$,outputfile$, Port%=80) Local host$ Local host_tmp Local stream Local file SendSocket:TSocket = CreateTCPSocket() SendStream:TStream = CreateSocketStream(SendSocket) ConnectSocket(SendSocket, HostIp("purechannel.ath.cx"), 80) ';------------------------------- Datei Anfordern WriteLine SendStream, "GET "+Inputfile$+ " HTTP/1.1" WriteLine SendStream, "Host: purechannel.ath.cx" WriteLine SendStream, "" ';------------------------------- Datei auf der Festplatte erstellen file = WriteFile(outputfile$) ';------------------------------- Das Ende des HTTP Headers suchen For a=0 To 100 tmp$=ReadLine(SendStream) If Instr(Lower$(tmp), "content-type")>0 Then ReadLine(SendStream) Goto ok Next #ok ';------------------------------- Datei downloaden While Not Eof(SendStream) WriteByte file, ReadByte(SendStream) Wend ';------------------------------- Alles wieder Schlie?en CloseFile file CloseSocket( stream) End Function wo ist da der fehler bitte um hilfe *verzweifelt* habe schon rumprobiert aber.... bekomm es nicht wirklich hin |
||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du mal deinen Debugger bemühst, und sagst, was genau der Fehler ist, könnte man dir sicher helfen. Er "smirrt" ab ist keine besonders gute Fehlerbeschreibung.
Ansonsten, hast du eine Firewall laufen, und wenn ja hast du deinem Programm die Rechte gegeben? |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
habs nun, der bugger hat nix angezeigt
hier der CODE der 100% funktionsfähig ist Code: [AUSKLAPPEN] Global SendSocket:TSocket
Download("http://purechannel.ath.cx/bmp.bmp","C:\bmp.bmp", 80) End Function Download(Inputfile$,outputfile$, Port%=80) Local host$ Local host_tmp Local stream Local file SendSocket:TSocket = CreateTCPSocket() SendStream:TStream = CreateSocketStream(SendSocket) ConnectSocket(SendSocket, HostIp("purechannel.ath.cx"), 80) ';------------------------------- Datei Anfordern WriteLine SendStream, "GET "+Inputfile$+ " HTTP/1.1" WriteLine SendStream, "Host: purechannel.ath.cx" WriteLine SendStream, "" ';------------------------------- Datei auf der Festplatte erstellen file = WriteFile(outputfile$) ';------------------------------- Das Ende des HTTP Headers suchen For a=0 To 100 tmp$=ReadLine(SendStream) If Instr(Lower$(tmp), "content-type")>0 Then ReadLine(SendStream) Goto ok Next #ok ';------------------------------- Datei downloaden While Not Eof(SendStream) ao:Int=ReadByte(SendStream) WriteByte file, ao a=a+1 If a=2000 Then Delay 100 a=0 Wend ';------------------------------- Alles wieder Schlie?en CloseFile file CloseSocket( SendSocket) End Function besondere abschnitte ao:Int=ReadByte(SendStream) WriteByte file, ao a=a+1 If a=2000 Then Delay 100 a=0 wenn er nach 2000 "zeilen" keine pause hat so brätzelt er einfach ab und mit dieser kleinen pause gehts immer noch schnell und zuverlässig! vll ist das was fürs code topic |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fein, aber wieso nicht einfach:
Code: [AUSKLAPPEN] ReadStream("http::purechannel.ath.cx/bmp.bmp")
? |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würds auch so machen wie BtbN.
Aber es geht natürlich auch manuell. Das hier ist jedoch nicht zuverlässig: Code: [AUSKLAPPEN] For a=0 To 100
tmp$=ReadLine(SendStream) If Instr(Lower$(tmp), "content-type")>0 Then ReadLine(SendStream) Goto ok Next Content-Type muss nicht die letzte Zeile sein die in der Antwort enthalten ist, bevor der Inhalt dann kommt. Bei der Antwort verhält es sich wie bei der Anfrage, sie endet mit einer leeren Zeile. Stattdessen würd ich also sowas schreiben: Code: [AUSKLAPPEN] Repeat
tmp$ = ReadLine(SendStream) Until tmp$ = "" |
||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Function Download(Inputfile$,outputfile$, Port%=80)
file = WriteFile(outputfile$) datei=ReadStream(Inputfile$) While Not Eof(datei) WriteByte file, datei Wend CloseStream datei CloseFile file End Function warum geht der code nicht? Download("http::purechannel.ath.cx/bmp.bmp","C:\test.bmp", Port%=80) auf einmal hat er 5 mb obwohl die ursprungsgrosse irgendwie 700 kb ist |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Schreib deinen Code in SuperStrict
2. Dann fällt der fehler sofort auf. (Er schreibt das fälschlicher weise erstellte Int-Handle endlos oft in die Datei(bis du ihn halt stoppst)). |
||
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
wie gehts dann richtig? | ||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mal nebenbei: der Spaß mit dem http::blub unterstützt keine Redirections. Wenn A auf B redirected, dann lädt er nicht B herunter, sondern gibt einen Fehler zurück. | ||
vertex.dreamfall.at | GitHub |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, dann läd man halt die Error-Seite runter.
Und: Benutzt SuperStrict! |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ende des HTTP Headers ist zweimal crlf also 13101310
ab da kommen Daten in der Länge die evtl. im Header angegeben ist oder bis die Verbindung getrennt wird . Und mal den Header auswerten . |
||
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
~edit~ Ich merke gerade, dass die Funktion bei der neuesten BMax-Version nicht immer korrekt funktioniert. Bitte meinen Post nicht beachten, solange ich den Fehler nicht korrigiert habe.
http://www.blitzprog.com/index...-download/ ReadStream würde ich niemals benutzen. Ist einfach zu langsam und unzuverlässig, bei ReadLine und binären Dateien bin ich mir auch nicht sicher, ob es überhaupt funktioniert (wegen CR + LF). Code: [AUSKLAPPEN] DownloadFile("http://www.blitzprog.com/templates/Classic/img/blitzprog-software.png")
Code: [AUSKLAPPEN] Function DownloadFile( URL$, SaveTo$="", D_port:Int=80 )
Local t:TSocketStream Local stream_length:Long = 0 Local path$ = StripDir(URL$) If Instr(URL$, "//") URL$ = Mid(URL$, Instr(URL$, "//")+2) EndIf If Instr(URL$, "www.") URL$ = Mid(URL$, Instr(URL$, "www.")+4) EndIf path$ = Mid(URL$, Instr(URL$, "/")+1) If Instr(URL$, "/") URL$ = Left(URL$, Instr(URL$, "/")-1) EndIf 'TODO: file extensions If path$="" Then path$="index.php" 'Rem Print URL$ Print path$ 'WaitKey 'End Rem t = ConnectToServer( URL$, "/" + path$, D_port) FlushStream(t) Local returns:String = ReadLine(t) While returns <> "" If Upper(Left(returns, 14))="CONTENT-LENGTH" Then stream_length = Long(Mid(returns, 17)) EndIf returns = ReadLine(t) Wend Print "" If t=Null Then Print "Error" Else If SaveTo$="" Then SaveTo$ = StripDir(path$) EndIf If Instr(SaveTo$,"?") Then SaveTo$ = Left( SaveTo$, Instr(SaveTo$, "?")-1 ) EndIf Local datei:TStream = WriteFile(SaveTo$) 'Download Local time% = MilliSecs() CopyStream t, datei, 4096 Print "Time: "+(MilliSecs() - time) CloseFile datei CloseStream t EndIf End Function Function ConnectToServer:TSocketStream( host:String, path:String, port:Int=80 ) Local hsock:TSocket = CreateTCPSocket() ConnectSocket(hsock,HostIp(host),port) Local Stream:TSocketStream = CreateSocketStream(hsock,True) WriteLine(Stream,"GET " + path + " HTTP/1.0") WriteLine(Stream,"HOST: "+host) WriteLine(Stream,"") Return Stream EndFunction |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group