![]() |
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 :-)
|
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. ![]() Vllt. hilft Dir dies ja schon weiter. Viele Grüße Jan |
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:
Das ganze dann noch in ein try/except packen.
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; 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; |
AW: Datenübertragung via HTTP POST
Ein Beispiel, wie mit Indy ein Json Dokument gesendet und die Antwort ausgegeben wird habe ich hier erstellt:
![]() 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. |
AW: Datenübertragung via HTTP POST
Zitat:
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 |
AW: Datenübertragung via HTTP POST
suche noch ein einfaches Beispiel :roll:
dieser quellcode funktioniert so leider nicht. hier die Beschreibung: ![]()
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; |
AW: Datenübertragung via HTTP POST
Und so?
Delphi-Quellcode:
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.
lParamList := TStringList.Create;
lParamList.Add('{'); lParamList.Add('"message":"test message",'); lParamList.Add('"type":"TEST",'); lParamList.Add('"sender":"self",'); lParamList.Add('"timestamp":"1424950740000"'); lParamList.Add('}'); |
AW: Datenübertragung via HTTP POST
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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 |
AW: Datenübertragung via HTTP POST
Was steht denn in Zeile 66?
|
AW: Datenübertragung via HTTP POST
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
es kommt keine Fehlermeldung mehr! trotzdem ohne Funktion :-( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz