Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Datenübertragung via HTTP POST (https://www.delphipraxis.net/211894-datenuebertragung-via-http-post.html)

lucy 18. Nov 2022 08:26

Datenübertragung via HTTP POST
 
hier die Eckdaten:

Zugriff mit Datenformat : HTTP POST {IP}:{PORT}/rest/external/http

Daten:
UTF-8 kodiertes JSON als Body eines HTTP POST Aufrufs

Return-Werte:
Es werden die Standard-HTTP-Return-Codes verwendet. Außerdem wird ein JSON Objekt zurück geliefert.

HTTP Code Bedeutung:
200 Alarm erfolgreich übergeben
400 Der Aufruf war fehlerhaft

habe noch nicht mit der idHTTP Komponente gearbeitet :-(
wie baue ich eine Verbindung zum Server auf?
wie bewkomme ich die Antwort vom Server "Request" ausgewertet?
brauch mal ein einfaches Beispiel um reinzukommen.

Delphi-Quellcode:
 idHTTP1.Post('{IP}:{PORT}/rest/external/http', // das wird wohl nicht reichen :-)

itblumi 18. Nov 2022 08:44

AW: Datenübertragung via HTTP POST
 
Hallo lucy,

ich denke du benutzt eine Rest Service und möchtest mit diesem kommunizieren. Diesen selbst zu erstellen mit Indy und anzusprechen würde auch gehen, aber ich denke es wäre für dich einfacher einer Rest Client zu erstellen.
Ich habe Dir dazu mal ein Beispiel von Embarcadero raus gesucht in dem dies gemacht wird.
https://docwiki.embarcadero.com/RADS...d_Web_Services

Vllt. hilft Dir dies ja schon weiter.

Viele Grüße
Jan

omnibrain 18. Nov 2022 09:14

AW: Datenübertragung via HTTP POST
 
Ich benutze TSslHttpRest von ICS. Den finde ich wesentlich komfortabler.
Hier ein Paar Snippets um dich auf den Weg zu bringen:

Code:
bodystring:='{"key":"value"}'
url:='https://example.com/api/v1/endpoint';
httpwork.RcvdStream := TStringStream.Create('',TEncoding.UTF8);
httpwork.RestRequest(httpPost,url,false,bodystring);
httpresultstring := httpwork.responseraw;
Das ganze dann noch in ein try/except packen.
httpresultstring kannst du dann dem Statuscode gemäß verarbeiten.
Code:
case httpwork.StatusCode of
  200: //verarbeiten
  400: //Fehler, aber vielleicht steht im Bodystring was dazu
else
  //alle anderen Fehler
end;

mjustin 18. Nov 2022 09:19

AW: Datenübertragung via HTTP POST
 
Ein Beispiel, wie mit Indy ein Json Dokument gesendet und die Antwort ausgegeben wird habe ich hier erstellt:

https://mikejustin.wordpress.com/201...-6-https-post/


Code:
Delphi-Quellcode:
program JSONPostExample;
 
{$APPTYPE CONSOLE}
 
uses
  IdHTTP, IdGlobal, SysUtils, Classes;
 
var
  HTTP: TIdHTTP;
  RequestBody: TStream;
  ResponseBody: string;
begin
  HTTP := TIdHTTP.Create;
  try
    try
      RequestBody := TStringStream.Create('{"日本語":42}',
        TEncoding.UTF8);
      try
        HTTP.Request.Accept := 'application/json';
        HTTP.Request.ContentType := 'application/json';
        ResponseBody := HTTP.Post('https://httpbin.org/post',
          RequestBody);
        WriteLn(ResponseBody);
        WriteLn(HTTP.ResponseText);
      finally
        RequestBody.Free;
      end;
    except
      on E: EIdHTTPProtocolException do
      begin
        WriteLn(E.Message);
        WriteLn(E.ErrorMessage);
      end;
      on E: Exception do
      begin
        WriteLn(E.Message);
      end;
    end;
  finally
    HTTP.Free;
  end;
  ReadLn;
  ReportMemoryLeaksOnShutdown := True;
end.

lucy 20. Nov 2022 11:17

AW: Datenübertragung via HTTP POST
 
Zitat:

Ein Beispiel, wie mit Indy ein Json Dokument gesendet und die Antwort ausgegeben wird habe ich hier erstellt:

https://mikejustin.wordpress.com/201...-6-https-post/
vielen lieben Dank für Deine Hilfe :-)

der Code sieht sehr komplex aus! kannst du mir was zu den einzelnen zeilen erzählen? möchte diesen Code auch verstehen.
deshalbt wollte ich erstmal nur mit einer "Verbindung" + "Request vom Server" anfangen.

danke

lucy 21. Nov 2022 08:56

AW: Datenübertragung via HTTP POST
 
suche noch ein einfaches Beispiel :roll:
dieser quellcode funktioniert so leider nicht.

hier die Beschreibung:
https://alamos-support.atlassian.net...+Schnittstelle

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  lParamList: TStringList;
begin
  lParamList := TStringList.Create;
  lParamList.Add('message:test message');
  lParamList.Add('type:TEST');
  lParamList.Add('sender:self');
  lParamList.Add('timestamp:1424950740000');
  try
    memo1.Lines.Text := idHTTP1.Post('http://192.168.0.5/rest/external/http', lParamList);
  finally
    lParamList.Free;
  end;
end;

DeddyH 21. Nov 2022 09:35

AW: Datenübertragung via HTTP POST
 
Und so?
Delphi-Quellcode:
lParamList := TStringList.Create;
  lParamList.Add('{');
  lParamList.Add('"message":"test message",');
  lParamList.Add('"type":"TEST",');
  lParamList.Add('"sender":"self",');
  lParamList.Add('"timestamp":"1424950740000"');
  lParamList.Add('}');
Wenn das geht, ist der Aufbau des JSON-Objekts schon einmal korrekt, aber das sollte man nicht so machen, sondern besser eine "richtige" Bibliothek dafür nehmen.

lucy 21. Nov 2022 09:52

AW: Datenübertragung via HTTP POST
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

und so?
geht nicht :-(

Delphi-Quellcode:
var
  lParamList: TStringList;
begin
  lParamList := TStringList.Create;
  lParamList.Add('{');
  lParamList.Add('"message":"test message",');
  lParamList.Add('"type":"TEST",');
  lParamList.Add('"sender":"self",');
  lParamList.Add('"timestamp":"1424950740000"');
  lParamList.Add('}');
  try

DeddyH 21. Nov 2022 11:32

AW: Datenübertragung via HTTP POST
 
Was steht denn in Zeile 66?

lucy 21. Nov 2022 12:09

AW: Datenübertragung via HTTP POST
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Was steht denn in Zeile 66?
Sorry, die Fehlermeldung gehört nicht zum Projekt :oops:

es kommt keine Fehlermeldung mehr! trotzdem ohne Funktion :-(


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz