Seite 1 von 1

Datei runterladen

Verfasst: Di 17. Okt 2006, 03:40
von Replay
Hallo erstmal. Da ich hier neu bin möchte ich mich euch mal kurz vorstellen.
Nachdem ich jetzt nach Jahren des Parallelbetriebs endgültig auf Linux umgestiegen bin, musste ich zwangsweise auch die Programmiersprache ändern. Da ich 1.) zu Windows Zeiten QBasic, Profan, später Visual Basic programmiert haben und 2.) zu faul bin jetz C zu lernen, habe ich Gambas für mich entdeckt. Und auf der Suche nach Hilfe hab ich dann dieses schöne Board hier entdeckt...

Und nu zu meinem Problem:

Ich möchte eine Art Downloadmanager schreiben. Nur das Prolem ist das ich nicht weiss wie ich per Gambas Dateien aus dem Internet herunterladen kann. Und vBasic war es per Socket noch relativ einfach, aber hier hänge ich jetzt komplett.

Momentan habe ich das Problem per Shell, Konsole und wget gelöst, aber das is nicht das gelbe vom Ei.

Würde mich sehr freuen wenn mir jemand von euch helfen könnte oder vllt. einen Link zu einem Beispielcode hätte. Ich komme nämlich jetzt garnicht mehr weiter. Danke schonmal

Verfasst: Di 17. Okt 2006, 13:13
von roemi
Moin und Willkommen Replay!

Hast Du schonmal auf die Linksammlung gewechsel und dort die Beispiele durchstöbert?
Zudem haben wir hier auch einen kleinen Downloadbereich.

Evtl. ist da was dabei :wink:

Verfasst: Di 17. Okt 2006, 16:22
von Replay
OK, hab jetz alle Links und Downloadmöglichkeiten durch. Hab jetzt zwar mein Gambas geupdatet ;), aber leider immer noch keine Lösung für mein Problem gefunden. Noch ne andere Idee?

Verfasst: Do 19. Okt 2006, 14:56
von nibbana
Am einfachsten gehts mit der Klasse HttpClient (Komponente gb.net.curl)

Code: Alles auswählen

client = NEW HttpClient
client.url = "http://localhost:8085" ' gesuchte Addresse
client.get("/tmp/test.html") ' Seite laden und als "/tmp/test.html" abspeichern
Wenn du Socket benutzen willst mußt du dann das gesamte Protocol selbst schreiben (Komponente gb.net)

Code: Alles auswählen

ReadHTMLSite("www.gambas-club.de", "/")

PUBLIC SUB ReadHTMLSite(host AS String, OPTIONAL site AS String = "/", OPTIONAL port AS Integer = 80)

  DIM sock AS Socket
  DIM s, result AS String
  
  ' socket anlegen
  sock = NEW Socket
  
  ' socket öffnen für direkte verbindung ins internet
  'sock.Connect(host, port)  
  
  ' oder über einen proxy auf port 8095
  sock.Connect("localhost", 8095)
  
  ' auf verbindung warten
  DO WHILE (sock.Status <> 7) AND (sock.Status > 0)
    WAIT 0.1
  LOOP

  IF sock.Status <> 7 THEN
    Error.Raise("kann verbidung nich herstellen")
  ENDIF

  ' minimalen http-header senden
  IF port = 80 THEN
    s = Subst("GET http://&1&2 HTTP/1.0\r\n", host, site)
  ELSE 
    s = Subst("GET http://&1:&2&3 HTTP/1.0\r\n", host, port, site)
  ENDIF
  WRITE #sock, s, Len(s)
  s = Subst("Host: &1\r\n", host)
  WRITE #sock, s, Len(s)
  s = "User-Agent: Gambas not VB\r\n" ' ;-)
  WRITE #sock, s, Len(s)
  s = "\r\n"
  WRITE #sock, s, Len(s)
  
  ' auf antwort warten
  DO WHILE Eof(sock) <> FALSE
    WAIT 0.1
  LOOP
  
  ' http-header lesen
  REPEAT 
    LINE INPUT #sock, result
    PRINT "Header -> "; result
  UNTIL Len(result) = 0
  
  ' html-document lesen
  READ #sock, result, Lof(sock)
  
  CLOSE #sock

  PRINT "********** Document **********"
  PRINT result  
END
mfg. nibbana

Verfasst: Di 24. Okt 2006, 01:59
von Replay
Klasse..Ich danke Dir vielmals. Hat zwar leider nicht funktioniert, aber ist für ein anderes Projekt genau das was ich gesucht habe ;).