Sorry, nochmal zum mitschreiben: DOWNLOADS (abgeschlossen)

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

DATIS

Betreff: Sorry, nochmal zum mitschreiben: DOWNLOADS (abgeschlossen)

BeitragMi, Jul 19, 2006 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Also erstmal entschuldigung, dass ich es nicht so ganz verstanden habe. Ich habe seit 3 Jahren mit BlitzBasic programmiert, bin aber erst jetzt ( Embarassed ) zum Internet gekommen...
Und jetzt habe ich vor ein Programm zu schreiben, dass jedesmal, wenn man es startet, die aktuelle "news.txt" von www.datis.de.vu runterlädt (http://www.datis.de.vu/news.txt).
Mein Problem ist jetzt folgendes: Invalid Stream handle.

Mein Code:
Code:
file=ReadFile("http::www.datis.de.vu/news.txt")
file1=WriteFile("C:\news.txt")

While Not Eof(file)
WriteByte file1,ReadByte(file)
Wend

CloseFile(file)
CloseFile(file1)
End


Ja, das habe ich nur abgeschrieben und leicht verändert. Aber der springende Punkt ist, warum es nicht klappt, wenn man es ausführt.
Frauen und Technik?
Männer und BHs?

Beides möglich.
  • Zuletzt bearbeitet von DATIS am Do, Jul 20, 2006 10:31, insgesamt einmal bearbeitet

BtbN

BeitragMi, Jul 19, 2006 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil es "http::*meineurl*" Nur bei BlitzMax gibt.
Bei BB muss man es etwas anders machen.
Dort must du via HTTP die Datei selbst anfordern.

DATIS

Betreff: Beispiel?!

BeitragMi, Jul 19, 2006 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, dann habe ich mich wohl einmal verschaut, als ich dach gesucht habe. Da bin ich dann wahrscheinlich zu BlitzMax gekommen. Embarassed

Aber wie gesagt kann ich mit Internet und Netzwerk überhaupt nichts. Könntet ihr einmal ein (ganz kurzes) Beispiel machen?
Ich habe das mit dem Anfordern nicht ganz verstanden (sorry). Wenn ich ein Beispiel hätte, wäre es einfacher für mich das zu verstehen.
Frauen und Technik?
Männer und BHs?

Beides möglich.

Willi die Rübe

BeitragMi, Jul 19, 2006 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst eine TCP Verbindung über den StandartPort 80 zu dem Server aufbauen. Und mittels HTTP(Hypertext Transfer Protocol) die Datei anfordern.

Code:
stream = OpenTCPStream("datisweb.da.funpic.de", 80)

WriteLine stream, "GET http://datisweb.da.funpic.de/news.txt HTTP/1.1"
WriteLine stream, "Host: datisweb.da.funpic.de"
WriteLine stream, ""


Nun sendet der Webserver einige Headerinformationen, wie z.B. die Größe oder den Name. Am Ende ist immer in Leerzeichen, weshalb man den Header leicht überspringen kann:

Code:
Repeat
 l$=ReadLine(stream)
 If Instr(Lower(l$), "content-length: ") then contentlength=Int( Mid(l$, Instr(l$, " ")) )
Until l=""


Jetzt muss man nur noch, wie du es in deinem Code ja auch hast, alles weitere in eine Datei schreiben:

Code:
dat=WriteFile("news.txt")

Repeat     
 WriteByte dat, ReadByte(stream)   
Until Eof(stream)=1


Und natürlich alle Streams wieder beenden:
Code:
CloseFile dat
CloseTCPStream stream


Gesamter Code:

Code:
stream = OpenTCPStream("datisweb.da.funpic.de", 80)

global contentlength%
WriteLine stream, "GET http://datisweb.da.funpic.de/news.txt HTTP/1.1"
WriteLine stream, "Host: datisweb.da.funpic.de"
WriteLine stream, ""

Repeat
 l$=ReadLine(stream)
 If Instr(Lower(l$), "content-length: ") then contentlength=Int( Mid(l$, Instr(l$, " ")) )
Until l=""

dat=WriteFile("news.txt")

For a=1 to contentlength%
 WriteByte dat, ReadByte(stream)   
Next

CloseFile dat
CloseTCPStream stream


Und fertig ist unser Eiersalat Very Happy

Edit: Ja, BORNtobeNAMELESS hat, nach ein paar Tests, doch Recht Very Happy Ich hab den Satz wegeditiert.
Edit2: Nochmal den Headerkrams verbessert Very Happy
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage
  • Zuletzt bearbeitet von Willi die Rübe am Sa, Aug 05, 2006 15:45, insgesamt 2-mal bearbeitet

BtbN

BeitragDo, Jul 20, 2006 8:10
Antworten mit Zitat
Benutzer-Profile anzeigen
<Willi die Rübe> hat Folgendes geschrieben:
Hier sollte man aufpassen, denn ein Webserver sendet nur bei bekannten Datentypen einen Header.


Das ist mir neu. Wieso sollte der Server dann keinen Header senden? Dann wäre es ja kein HTTP mehr! Also eigentlich kommt da immer ein Header, sogar bei einem Error.

Und dein Filtern nach dem content-type finde ich auch recht seltsam.
Warum nicht einfach:

Code:
Local line$ = ReadLine(stream)
While line
    line = ReadLine(stream)
Wend


Das liest gezielt den kompletten Header weg.
 

Skulk

BeitragDo, Jul 20, 2006 9:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke er meint dass kein "content-type" gesendet wird.

Somit funzt das instr nicht mehr und die schleife wird zur Endlosschleife
War doesn't determine who's right,
war determines who's left...

DATIS

Betreff: Wow, kapiert ;-)

BeitragDo, Jul 20, 2006 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke.
Ich habe zwar ein bisschen gebraucht um da erstmal durchzuschauen u.s.w. aber am Ende (als ich es kapiert habe) funktionierte es.
Vielen Dank.
Frauen und Technik?
Männer und BHs?

Beides möglich.

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group