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
 
Ykcim

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

AW: CURL in Delphi ausführen -d

  Alt 5. Feb 2025, 20:52
Hallo jaenicke,
vielen Dank für Deine Antwort. Leider war das noch nicht die Lösung. Ich habe es auf pkREQUESTBODY umgestellt und mit und ohne poDoNotEncode getestet...
Ergebnis ist in beiden Fällen ein HTTP/1.1 400 Bad Request

Ich habe jetzt ein bißchen wild durchprobiert, weil mir der logische Ansatz fehlt...

Diese Kombination scheint zu klappen. Es kommt kein Fehler und der Content ist wie erwartet. Aber warum das jetzt funktioniert weiß ich leider nicht

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.Params.AddItem('client_id', APIKEY, pkGETorPOST, [poDoNotEncode]);
         Request.Params.AddItem('client_secret', APISecret, pkGETorPOST, [poDoNotEncode]);
         Request.Params.AddItem('username', UserName, pkGETorPOST, [poDoNotEncode]);
         Request.Params.AddItem('password', Password, pkGETorPOST, [poDoNotEncode]);

         Request.AddParameter('grant_type', 'password', pkGETorPOST, [poDoNotEncode]);


         URL:= Request.GetFullRequestURL;
         Request.Execute;
         if request.Response.StatusCode = 200 then begin
            JsResponse:= TJSONObject.ParseJSONValue(request.Response.Content);
            Result:= JsResponse.GetValue<string>('access_token');
         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;
Mit WireShark habe ich schon versucht, komme ich aber nicht zurecht. Es werden einfach zu viele Pakete gleichzeitig protokolliert und ich finde die richtigen nicht, geschweige denn, dass ich etwas richtiges herauslesen kann. Das ist mir erst einmal gelungen...
Patrick
  Mit Zitat antworten Zitat
 


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 01:02 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