AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TREST* Daten im Body übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

TREST* Daten im Body übergeben

Ein Thema von Zwirbel · begonnen am 10. Okt 2016
Antwort Antwort
Zwirbel

Registriert seit: 17. Aug 2009
66 Beiträge
 
Delphi 11 Alexandria
 
#1

TREST* Daten im Body übergeben

  Alt 10. Okt 2016, 13:55
Hallo,

bisher habe ich erfolgreich mit den Komponenten "TRESTClient", "TRESTRequest" und "TRESTResponse" eine Restabfrage implementieren können. Ebenfalls eine Übermittlung von Nutzdaten, allerdings waren da alle Daten per "TRESTClient.Params.AddItem('data', s);" hinzugefügt. Nun soll ich Nutzdaten versenden die alle im Body stehen. Aber wenn ich die Daten versende, bekomme ich immer einen Fehler "Modul: REST-Anforderung fehlgeschlagen: Execution of request terminated with unknown error".

Die Komponenten:
Delphi-Quellcode:
object RESTClientMUCjson: TRESTClient
  Accept = 'application/json, text/plain; q=0.9, text/html;q=0.8,'
  AcceptCharset = 'UTF-8, *;q=0.8'
  Params = <>
  HandleRedirects = True
  OnHTTPProtocolError = RESTClientMUCjsonHTTPProtocolError
  Left = 48
  Top = 320
end
object RESTRequestMUCjson: TRESTRequest
  Client = RESTClientMUCjson
  Method = rmPOST
  Params = <
    item
    end>
  Response = RESTResponseMUCjson
  OnAfterExecute = RESTRequestMUCjsonAfterExecute
  SynchronizedEvents = False
  OnHTTPProtocolError = RESTRequestMUCjsonHTTPProtocolError
  Left = 120
  Top = 344
end
object RESTResponseMUCjson: TRESTResponse
  ContentType = 'application/json'
  Left = 200
  Top = 320
end
Der Code (das ganze dient mir erst mal dazu mit fest codierten Werten überhaupt einen Datensatz übermitteln zu können, um das Prinzip zu verstehen):
Delphi-Quellcode:
function AddBodyStr(const aKey, aValue : string) : string;
  { Füge aKey, aValue dem Body hinzu
    Beispiel:
    rotationId=143982

    Das Funktionsergebnis liefert einen String mit einem "/" am Ende, so kann man aus dem
    Funktionsergbnis einen lesbaren Gesamtstring aller Bodies fürs loggen zusammen bauen. }

begin
  Result := '';
  if aValue <> 'then begin
    Result := Format('%s=%s', [aKey, aValue]);
    RESTRequestMUCjson.AddBody(Result, ctAPPLICATION_JSON);
    Result := Result + '/';
  end;
end;

rotationId := '143982';
orderId := '';
cleaningBegin := '2016-10-10T14:25:00.000+02:00';
cleaningEnd := '2016-10-10T14:55:00.000+02:00';
cleanerOnPosition := '2016-10-10T14:30:00.000+02:00';
orderType := 'QuickCleaning';
teamType := 'Maier';
specialInformation := 'Spezial';
RESTClientMUCjson.BaseURL := Format(edtBaseURL.Text, [rotationId]);
Body := '';
Body := Body + AddBodyStr('rotationId', rotationId);
Body := Body + AddBodyStr('orderId', orderId);
Body := Body + AddBodyStr('cleaningBegin', cleaningBegin);
Body := Body + AddBodyStr('cleaningEnd', cleaningEnd);
Body := Body + AddBodyStr('cleanerOnPosition', cleanerOnPosition);
Body := Body + AddBodyStr('orderType', orderType);
Body := Body + AddBodyStr('teamType', teamType);
Body := Body + AddBodyStr('specialInformation', specialInformation);
AddResults(RESTClientMUCjson.BaseURL); // protokolliere die BaseURL
AddResults(Body); // protokolliere die einzelnen Nutzdaten
try
  RESTRequestMUCjson.Execute;
ergibt dann im Fehlerprotokoll:
[10.10.2016 13:26:59,561] http://XXX/flight/143982/cleaningOrder
[10.10.2016 13:26:59,561] rotationId=143982/cleaningBegin=2016-10-10T14:25:00.000+02:00/cleaningEnd=2016-10-10T14:55:00.000+02:00/cleanerOnPosition=2016-10-10T14:30:00.000+02:00/orderType=QuickCleaning/teamType=Maier/specialInformation=Spezial/
[10.10.2016 13:31:47,912] Error: @@@
Modul: REST-Anforderung fehlgeschlagen: Execution of request terminated with unknown error

Wo liegt hier nun der Denkfehler?

a) ist "Method = rmPOST" OK?
b) ist das zusammen basteln des Body so OK?
c) ist das "ctAPPLICATION_JSON" im "AddBody" so OK?
d) in der Doku die uns zur Verfügung steht wird der Wert für "rotationId" als "integer" angegeben. Blöde frage, wie übergebe ich denn in diesem Fall explizit einen Integer? Letztlich kann ich doch ausschlielich strings übergeben.

Vielen Dank im Voraus.

Gruß, Markus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.
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