![]() |
Curl mit Indy aufrufen
Hallo
Ich würde gerne einen CURL aufruf mit Indy Komponenten machen bzw. einen Aufruf der die gleichen Informationen enthält. der Curl um den es geht wird in einer Demo aus folgenden Feld generiert: { "type": 0, "email": "example@bsp.at", "name": "apitest", "language": "de" } und sieht dann so aus: curl -X PUT --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Bearer beispielToken' -d '{ \ "type": 0, \ "email": "example%40bsp.at", \ "name": "apitest", \ "language": "de" \ }' 'https://api.nuki.io/account/user' mein bisheriger Ansatz in Delphi sieht folgendermaßen aus:
Delphi-Quellcode:
Ich bin für jede Hilfe dankbar
idNukihttpapi.Request.CustomHeaders.AddValue('Authorization', 'Bearer BeispielToken');
idNukihttpapi.Request.Accept:='application/json'; idNukihttpapi.Request.ContentType:='application/json'; idNukihttpapi.Request.URL:='https://api.nuki.io/account/user'; idNukihttpapi.Request.CharSet:='UTF-8'; BodyStringFeld.Add('{"type": 0, ') ; BodyStringFeld.Add('"email": "lukas.schuchlenz@esculenta.at", ') ; BodyStringFeld.Add('"name": "apitest", '); BodyStringFeld.Add('"language": "de" } ' +#39+'https://api.nuki.io/account/user'+#39); bodyStream.WriteString(BodyStringFeld.Text); bodyStream:=TStringStream.Create; idNukihttpapi.get('https://api.nuki.io/account/user',bodyStream); |
AW: Curl mit Indy aufrufen
Du musst idNukihttpapi.PUT benutzen und lass das
Zitat:
|
AW: Curl mit Indy aufrufen
Zitat:
Ich bekomme den http error "400 bad request" zurück |
AW: Curl mit Indy aufrufen
Dann zeig doch mal exakt deinen aktuellen Code (per Copy/Paste)
denn sowas
Delphi-Quellcode:
ist mehr ein Witz ... Turm aufbauen und dann wieder umstossen und dann wundern, warum da kein Turm ist
bodyStream.WriteString(BodyStringFeld.Text);
bodyStream:=TStringStream.Create; |
AW: Curl mit Indy aufrufen
Tut mir leid deswegen hab die Variablennamen erst im Forum geändert die waren zuerst irgenwie benannt
die Vollständige Funktionen sieht folgendermaßen aus
Delphi-Quellcode:
Email adresse und der Token sind nur platzhalter aber an denen scheitert es nicht.
var
bodyStringFeld: TStringList; bodystream: TStringStream; begin idNukiHTTPApi.Request.CustomHeaders.AddValue('Authorization', 'Bearer BeispielToken'); idNukiHTTPApi.Request.Accept := 'application/json'; idNukiHTTPApi.Request.ContentType := 'application/json'; idNukiHTTPApi.Request.URL := 'https://api.nuki.io/account/user'; idNukiHTTPApi.Request.CharSet := 'UTF-8'; bodystream := TStringStream.create; bodyStringFeld := TStringList.create; bodyStringFeld.Text := ''; bodyStringFeld.Clear; bodyStringFeld.Add('{ '); bodyStringFeld.Add('"type": 0, '); bodyStringFeld.Add('"email": "example@bsp.com", '); bodyStringFeld.Add('"name": "apitest", '); bodyStringFeld.Add('"language": "de" '); bodyStringFeld.Add('}'); bodystream.WriteString(bodyStringFeld.Text); idNukiHTTPApi.put('https://api.nuki.io/account/user', bodystream); |
AW: Curl mit Indy aufrufen
Dann setz bei deinem StringStream das Encoding auf UTF8, sonst hast du da nämlich Unicode und das passt nicht zu dem Encoding was du versprichst zu senden.
|
AW: Curl mit Indy aufrufen
Weiß nicht ob es mit dem Hinweis von Schokohase schon klappt, aber in deiner Delphi-Version gibt es auch spezielle REST-Klassen.
Mit folgendem Code:
Delphi-Quellcode:
Bekomme ich:
uses
REST.Client, REST.Types; procedure TForm2.FormCreate(Sender: TObject); var client: TRESTClient; response: TRESTResponse; request: TRESTRequest; begin client := TRESTClient.Create('https://api.nuki.io/'); try response := TRESTResponse.Create(nil); try request := TRESTRequest.Create(nil); try request.Client := client; request.Response := response; request.Resource := 'account/user'; request.Method := rmPUT; // <<< Edit: Hatte ich vergessen request.AddParameter('Authorization', 'Bearer BeispielToken', TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]); request.AddBody('{ "type": 0, "email": "example@bsp.com", "name": "apitest", "language": "de" }', TRESTContentType.ctAPPLICATION_JSON); request.Execute; Memo1.Text := response.Content; Label1.Caption := response.StatusText; finally request.Free; end; finally response.Free; end; finally client.Free; end; end; Zitat:
|
AW: Curl mit Indy aufrufen
Das Ergebnis bekomme ich auch durch den lapidaren Aufruf der URL
![]() Das sagt also schon mal gar nichts aus (bis auf "Du kommst hier net rein!") |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 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-2025 by Thomas Breitkreuz