Mit Lazarus ins Internet gehen und Textdateien herunterladen

Alle Fragen zur Netzwerkkommunikation
Antworten
Gustav Gans
Beiträge: 25
Registriert: Mi 12. Sep 2007, 19:28

Mit Lazarus ins Internet gehen und Textdateien herunterladen

Beitrag von Gustav Gans »

Ich möchte gerne mit Lazarus ins Internet gehen und dort eine Textdatei herunterladen. Leider weiß ich überhaupt nicht, wie das geht. Ich habe zwar Erfahrungen mit Pascal und konnte mir auch ein zufriedenstellend funktionierendes Programm schreiben, aber für volle Funktionalität muss ich (Text-)Dateien downloaden können, deren URL bekannt ist. Gibt es dafür einen sehr einfachen Weg?

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Zuerst mal muss du wissen, um welches Protokoll es sich handelt.
HTTP, FTP .. ?
Dann kannst du z.B. von Synapse http://synapse.ararat.cz/ die entsprechende Klasse verwenden.

Gustav Gans
Beiträge: 25
Registriert: Mi 12. Sep 2007, 19:28

Beitrag von Gustav Gans »

Es ist HTTP, also z.B. "http://www.blah.net/datei.txt".
Dann ist bei Lazarus also keine entprechende Option mit dabei?

Danke, ich werd mir den Link mal ansehen.

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Wenn du wirklich nur eine Datei downloaden willst, geht's ganz einfach mit Synapse:
unit httpsend in die Uses nehmen und HttpGetText(..) verwenden.
http://synapse.ararat.cz/docs/help/httpsend.html

Gustav Gans
Beiträge: 25
Registriert: Mi 12. Sep 2007, 19:28

Beitrag von Gustav Gans »

Danke - gerade in diesem Moment war ich auf der Hilfeseite und nur noch einen Klick entfernt. :)

Das hört sich alles sehr gut an. Vielleicht klappt die Umsetzung schneller, als ich mir erhofft hatte.

Bevor ich dieses Forum gefunden habe, hatte ich schon die Geduld verloren, weil man in den Hilfeseiten von FPC und überhaupt im Internet zur Internetprogrammierung so gut wie gar nichts findet, wenn man nicht gerade schon ein Profi ist und weiß, wo man zu suchen hat.

Gustav Gans
Beiträge: 25
Registriert: Mi 12. Sep 2007, 19:28

Beitrag von Gustav Gans »

Nach einigen Hürden funktioniert es jetzt. Ich verstehe nur nicht, warum die Funktion als Ausgabevariable TStrings hat, es aber mit TStrings nicht klappt (Laufzeitfehler 217). Nach ein wenig Herumprobieren habe ich festgestellt, dass es stattdessen mit TStringList geht.

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Gustav Gans hat geschrieben:Nach einigen Hürden funktioniert es jetzt. Ich verstehe nur nicht, warum die Funktion als Ausgabevariable TStrings hat, es aber mit TStrings nicht klappt (Laufzeitfehler 217). Nach ein wenig Herumprobieren habe ich festgestellt, dass es stattdessen mit TStringList geht.


TString ist eine abstrakte Basisklasse, die nicht selber instantiiert werden kann.
Du hättest aber auch nur z.B. Memo1.Lines als Parameter übergeben können.

HttpGetText(URL, Memo1.Lines)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

theo hat geschrieben: TString ist eine abstrakte Basisklasse, die nicht selber instantiiert werden kann.

Ich habe mich immer schon gewundert, warum bei völlig abstarkte Klassen wie TStrings ein "create" überhaupt geht. Am besten wäre es, wenn TStrings.create gar nicht compilierbar wäre ("create" private in TStrings und erst public in z.B. TStringList). Weniger schön aber immer noch besser als die aktuelle Implementierung wäre, wenn schon ein create auf die abstrakte Klasse zu einer (dann verstehbaren) Exception führen würde und nicht erst der Aufruf einer Funktion.

-Michael

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

@mschnell: Ich weiss schon was du meinst.
Aber erstens kann man Create nicht "verstecken". Das ist bereits in TObject "public" und das kann man nicht auf ein tieferes Sichtbarkeitslevel setzen.
Zweitens gibt es das Konzept "abstrakte Basisklasse" für den Compiler eigentlich nicht. Das ist eine normale Klasse, welche "zufällig" eine oder mehrere abstrakte Methoden hat.
Da müsste man imo schon ein neues Sprachkonstrukt einführen, um eine solche Klasse als "unbrauchbar" zu "markieren".
a la TMyClass = abstract class(TObject) oder so.

Aber eine Warnung wird ja ausgegeben:

unit1.pas(33,21) Warning: Constructing a class "TStrings" with abstract methods

alexander
Beiträge: 423
Registriert: Di 5. Feb 2008, 12:45
OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von alexander »

hmmm also sicherlich besteht das Problem nicht mehr, aber zur vollständigkeit:

Code: Alles auswählen

procedure TForm2.BCheckUpdateClick(Sender: TObject);
var t:Tstringlist;
begin
  with THTTPSend.Create do
    begin
      if HTTPMethod('GET','dein link.txt') then
      try
        t:= TStringList.Create;
        t.LoadFromStream(Document);
//mache hier etwas
 
        t.Free;
      except
        Application.MessageBox('Ein Fehler ist aufgetreten','Fehler', 0);
      end;
    Free;
    end
end;
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu

Leifa
Beiträge: 7
Registriert: Mi 8. Apr 2009, 21:21

Re: Mit Lazarus ins Internet gehen und Textdateien herunterladen

Beitrag von Leifa »

Hallo!
Ich habe eine Frage zur Synapse-Installation. Ich habe noch nie zusätzliche Units installiert, wie binde ich das Synapse-Paket dauerhaft in Lazarus ein?
Gruß
Leif

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Mit Lazarus ins Internet gehen und Textdateien herunterladen

Beitrag von creed steiger »

Wie dauerhaft in Lazarus?
Synapse ist keine visuelle Komponente also reicht eigentlich für dein Programm:
in uses eintragen und bei Compilereinstellungen-andere Unit Dateien
den Pfad zu Synapse setzen

alternativ zu Synapse kannst du dir im fpc Verzeichnis
fpcsrc/packages/libcurl/tests
mal ansehen

Antworten