Diese Kombination scheint zu klappen. Es kommt kein Fehler und der Content ist wie erwartet. Aber warum das jetzt funktioniert weiß ich leider nicht
Diese beiden Zeilen:
Delphi-Quellcode:
Request.Params.AddItem('accept', 'application/json', pkHTTPHEADER, [poDoNotEncode]);
Request.Params.AddItem('content-type', 'application/x-www-form-urlencoded', pkHTTPHEADER, [poDoNotEncode]);
kannst du noch durch diese ersetzen:
Delphi-Quellcode:
Request.Aaccept := 'application/json';
{ Das Setzen des ContentType kann entfallen (s.u.) }
Diese Zeilen aus dem Original:
Delphi-Quellcode:
Request.AddParameter('grant_type', 'password', pkGETorPOST, []);
Request.AddParameter('username', UserName, pkGETorPOST, []);
Request.AddParameter('password', Password, pkGETorPOST, []);
Request.AddParameter('client_id', 'APIKEY', pkGETorPOST, []);
Request.AddParameter('client_secret', 'APISecret', pkGETorPOST, []);
solltest du besser so schreiben:
Delphi-Quellcode:
Request.AddParameter('grant_type', 'password', pkGETorPOST, [poDoNotEncode]);
Request.AddParameter('username', UserName, pkGETorPOST, [poDoNotEncode]);
Request.AddParameter('password', Password, pkGETorPOST, [poDoNotEncode]);
Request.AddParameter('client_id', APIKEY, pkGETorPOST, [poDoNotEncode]);
Request.AddParameter('client_secret', APISecret, pkGETorPOST, [poDoNotEncode]);
Statt der String-Literale 'APIKEY' und 'APISecret' werden nun die übergebenen Aufruf-Parameter verwendet und das poDoNotEncode sorgt für die korrekte Darstellung der Inhalte.
Da alle Parameter als pkGETorPOST angegeben sind, wird automatisch ein 'application/x-www-form-urlencoded' verwendet und der Body entsprechend zusammengebaut.
Der Body sieht dann so aus: 'grant_type=password&username=user-valid&password=SandboxPasswort2023!&client_id=xxxx xxxxx&client_secret=yyyyyyyyyyyyyyy'