Fphttpclient / Telegram Bot: Wie Dateien verschicken?

Rund um die LCL und andere Komponenten

Fphttpclient / Telegram Bot: Wie Dateien verschicken?

Beitragvon Timm Thaler » 11. Aug 2018, 19:54 Fphttpclient / Telegram Bot: Wie Dateien verschicken?

Ich habe einen kleinen Client auf dem Raspberry laufen, der mit einem Telegram Bot kommuniziert, von diesem Anfragen bekommt und daraufhin eine Antwort generiert und rausschickt. Das funktioniert soweit mit Text-Mitteilungen ganz gut.

Mit curl sieht das so aus:

Code: Alles auswählen
curl -X POST 'https://api.telegram.org/bot123456789:Alkbldpfkbdp123456789/sendMessage?chat_id=123456789&text="Testtest"'


Umgesetzt in FPC wird daraus:

Code: Alles auswählen
uses
  fphttpclient;
 
procedure Tbot.SendMessage(txt : string);
var
  httpClient : TFPHTTPClient;
begin
  try
    httpClient := TFPHTTPClient.Create(nil);
    try
      txt := 'https://api.telegram.org/bot123456789:Alkbldpfkbdp123456789/sendMessage?chat_id=123456789&text=' + txt;
      txt := httpClient.Get(txt);
    except
      WriteLn('Keine Verbindung zu Telegram');
    end;
  finally
    httpClient.Free;
  end;
end;


Nun möchte ich eine Bilddatei per Telegram verschicken. In curl sieht das so aus:

Code: Alles auswählen
curl -X POST https://api.telegram.org/bot123456789:A ... /sendPhoto -F chat_id=123456789 -F photo="@/home/pi/test.jpg"


Anscheinend verwendet curl hier die ID und den Pfad zur Datei als Argumente, so richtig hab ich den Unterschied zu obiger Schreibweise nicht verstanden.

Ich könnte das jetzt in FPC so umsetzen wie für Text:
Code: Alles auswählen
      txt := 'https://api.telegram.org/bot123456789:Alkbldpfkbdp123456789/sendPhoto?chat_id=123456789&photo=' + imgfile;
      txt := httpClient.Get(txt);
 


Ähm, geht leider nicht.

Wie muss ich den Dateipfad übergeben, dass die Datei mit gesendet wird? Oder muss ich die Datei erst einlesen und dann als Stream ausgeben?
Timm Thaler
 
Beiträge: 609
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Warf » 11. Aug 2018, 21:08 Re: Fphttpclient / Telegram Bot: Wie Dateien verschicken?

Schau dir mal das an: Link. Du performst mit curl POST requests, in lazarus aber nur get requests. das kann nicht funktionieren.

Aber als ich das letzte mal den FPHTTPClienten für Post verwndet hatte, hatte ich einen kleinen bug bei leeren stings den ich händisch fixen musste, kann sein das es den immernoch gibt.
Warf
 
Beiträge: 908
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Timm Thaler » 11. Aug 2018, 22:35 Re: Fphttpclient / Telegram Bot: Wie Dateien verschicken?

Hm, ich hab den Client vor einem Jahr geschrieben, da schien mir das am leichtesten. Aber POST scheint in einigen Belangen besser zu sein, und wahrscheinlich ist es auch keine schlechte Idee, die Anfrage in JSON zu packen. Muss ich mir nochmal anschauen.

Btw: Gibt es denn keine Hilfe zu Fphttpclient? Ich komme immer wieder auf http://wiki.freepascal.org/fphttpclient, aber das ist doch sehr dürftig. Ich hab mir das damals anhand von Beispielen zusammengebastelt, aber mir scheint, da fehlt mir einiges.
Timm Thaler
 
Beiträge: 609
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Warf » 12. Aug 2018, 01:35 Re: Fphttpclient / Telegram Bot: Wie Dateien verschicken?

Timm Thaler hat geschrieben:Btw: Gibt es denn keine Hilfe zu Fphttpclient? Ich komme immer wieder auf http://wiki.freepascal.org/fphttpclient, aber das ist doch sehr dürftig. Ich hab mir das damals anhand von Beispielen zusammengebastelt, aber mir scheint, da fehlt mir einiges.


Nö, aber es ist eigentlich nicht so kompliziert wenn man ein bisschen was von HTTP versteht. Der Code ist auch recht einfach einzusehen (HTTP/1.1 ist nicht so sonderlich kompliziert). Einfach ein bisschen in die Unit schauen
Warf
 
Beiträge: 908
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried