Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
848 Beiträge
 
Delphi 10.4 Sydney
 
#1

CURL in Delphi ausführen -d

  Alt 5. Feb 2025, 18:08
Hallo Zusammen,

ich habe Schwierigkeiten, eine CURL in Delphi zu übersetzen...

Code:
curl -k -i -X POST -H "accept: application/json" -H 'content-type: application/x-www-form-urlencoded' https://api-sandbox.dhl.com/parcel/de/account/auth/ropc/v1/token -d "grant_type=password\&username=user-valid\&password=SandboxPasswort2023!\&client_id=yyyyyyyyyyyyyyy\&client_secret=xxxxxxxxx"
yyy ersetzt den API-Key
xxx ersetzt den API-Secret

Ich habe die CURL bei https://reqbin.com/curl getestet und dort bekomme ich ein richtiges Ergebnis raus.

Ich habe folgende Funktion geschrieben:
Delphi-Quellcode:
function TForm1.GetDHLAccessToken_Own3(APIKEY, APISecret, UserName, Password: string; var URL: string): string;
var Client : TRESTClient;
      Request : TRESTRequest;
      JsResponse: TJSONValue;
      response: TCustomRESTResponse;
begin
   Client := TRESTClient.Create(nil);
   Request:= TRESTRequest.Create(client);
   Try
      Try
         Client.BaseURL:= 'https://api-sandbox.dhl.com';
         Request.Resource:= 'parcel/de/account/auth/ropc/v1/token';

         Request.Method := rmPOST;

         Request.Params.AddItem('accept', 'application/json', pkHTTPHEADER, [poDoNotEncode]);
         Request.Params.AddItem('content-type', 'application/x-www-form-urlencoded', pkHTTPHEADER, [poDoNotEncode]);

         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, []);

         URL:= Request.GetFullRequestURL;
         Request.Execute;
         if request.Response.StatusCode = 200 then begin
            JsResponse:= TJSONObject.ParseJSONValue(request.Response.Content);
            Result:= JsResponse.GetValue<string>('JWTToken');
         end
         else begin
            ShowMessage(IntToStr(request.Response.StatusCode) + ' ' + request.Response.StatusText);
            Result:= 'Error: ' + IntToStr(request.Response.StatusCode) + ' ' + request.Response.StatusText;
         end;
      Except
         ON e: Exception do begin
            Result:= E.Message;
            ShowMessage('Keine Daten erhalten');
         end;
      end;
   Finally
      Request.Free;
      Client.Free;
   End;
end;
Leider bekomme ich immer als Ergebnis:
Code:
HTTP/1.1 401 Unauthorized
Den Abschnitt mit dem -H gekennzeichnet ist, habe ich in den Header gepackt, alles nach dem -d in den Request.

Kann mir jemand sagen, was ich hier falsch mache?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat