AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CURL in Delphi ausführen -d

Ein Thema von Ykcim · begonnen am 5. Feb 2025 · letzter Beitrag vom 10. Feb 2025
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.662 Beiträge
 
Delphi 12 Athens
 
#1

AW: CURL in Delphi ausführen -d

  Alt 6. Feb 2025, 10:45
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'
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#2

AW: CURL in Delphi ausführen -d

  Alt 6. Feb 2025, 13:49
@uwe Raabe
Vielen Dank, dass habe ich verstanden. Das poDoNotEncode hatte ich bereits hinzugefügt.

Zitat:
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:
markierenDelphi-Quellcode:
Request.Aaccept := 'application/json';
{ Das Setzen des ContentType kann entfallen (s.u.) }
Das werde ich mal ausprobieren. Ich habe viel zu wenig Ahnung, wie die Kommunikation bei REST-Abfragen über das Internet technisch funktioniert. Hast Du da eine gute Quelle, wo ich mir einen Überblick verschaffen kann?

@Kas Ob
Many thanks for your answer and the explanation. I have not CURL installed jet. I tried by CMD. What I do not understand is the fact, that the Query of the CURL by CMD gives an error: 400 Bad Request. I upload a screenshot of the cmd window. When I check the exact same CURL by https://reqbin.com/curl I get the right result. Unfortunately the first 4 hours I tried by cmd only...

I will check how to read the header and body of the request before executing.
Many thanks

Patrick
Angehängte Grafiken
Dateityp: jpg Fehler_CURL_Token.jpg (123,2 KB, 32x aufgerufen)
Patrick

Geändert von Ykcim ( 6. Feb 2025 um 16:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.967 Beiträge
 
Delphi 12 Athens
 
#3

AW: CURL in Delphi ausführen -d

  Alt 6. Feb 2025, 15:01
I tried by CMD. What I do not understand is the fact, that the Query of the CURL by CMD gives an error: 400 Bad Request. I upload a screenshot of the cmd window. When I check the exact same CURL by https://reqbin.com/curl I get the right result. Unfortunately the first 4 hours I tried by cmd only...
Die Fehlermeldung ist im Grunde sehr einfach erklärt:
Bei Batchkommandos kannst du mit & mehrere Befehle hintereinanderschreiben. Daher nimmt es die folgenden Wörter als Befehle.

Das liegt daran, dass du falsche Anführungszeichen verwendest und somit der Parameter für -d nicht als ein Parameter interpretiert wird, sondern zerlegt wird. Der wird an curl daher gar nicht komplett übergeben, weshalb der Aufruf dort auch nicht geht. Es sollte also mit "...&..." funktionieren oder maskiert mit "...^&...".

// EDIT:
Du solltest dein Bild besser zensieren. Man kann die Zeichen noch erraten.
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 6. Feb 2025 um 15:10 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#4

AW: CURL in Delphi ausführen -d

  Alt 10. Feb 2025, 17:11
Hallo jaenicke,

vielen Dank für die Erklärung. Das habe ich nicht gewusst...

Zitat:
Du solltest dein Bild besser zensieren. Man kann die Zeichen noch erraten.
Danke für den Hinweis!
Patrick
  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 20:49 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