Autor Téma: Požadavek na získání tokenu na EGD distribuci  (Přečteno 779 krát)

Offline Jirka

  • Guru
  • *****
  • Příspěvků: 502
  • Karma: 9
    • Verze Delphi: XE2
Požadavek na získání tokenu na EGD distribuci
« kdy: 29-01-2025, 18:15:30 »
Ahoj
Nelze mi z Delphi XE2  pomocí synapse načíst data z openAPI  EGD distribuce
Vrací to 403 Forbidden
Dokumentace
https://portal.distribuce24.cz/download ... penApi.pdf
Mohl by to někdo prosím vyzkoušet ?
Díky

Metoda POST

url  https://idm.distribuce24.cz/oauth/token
Body {
"grant_type": "client_credentials",
"client_id": "02e7953491dbb3d55dab6abb5e8629cc",
"client_secret": "c5dfef83e23ca07d56e51e83ede8df1a",
"scope": "namerena_data_openapi"
}

přes Online služby https://reqbin.com/post-online to je OK


Kód: Delphi [Vybrat]
  1.  
  2.  
  3.          MemoPripravenaZprava.Lines.text:= ZpravaKPrevodu;
  4.          AStream:=TMemoryStream.Create;
  5.          MemoPripravenaZprava.Lines.SaveToStream(AStream);
  6.  
  7.        WorkUrl:= 'https://idm.distribuce24.cz/oauth/token';
  8.        HTTP := THTTPSend.Create;
  9.        try
  10.  
  11.  
  12.       //    HTTP.Headers.Clear;
  13.       // HTTP.Headers.Add('User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0');
  14.       // HTTP.Headers.Add('Accept-Encoding: deflate, gzip');
  15.       // HTTP.Headers.Add('Host: idm.distribuce24.cz');
  16.       //   HTTP.Headers.Add('Content-Type: application/json');
  17.       // HTTP.Headers.Add('Accept: */*');
  18.  
  19.  
  20.  
  21.        HTTP.Document.LoadFromStream(AStream);
  22.        Vysledek:=   HTTP.HTTPMethod('POST', WorkUrl);
  23.        memo1.Lines.Text:= HTTP.Headers.Text;
  24.        memo2.Lines.Text:= IntToStr(HTTP.ResultCode);
  25.        MemoVystupResponse.Lines.LoadFromStream(HTTP.Document);
  26.  
  27.  
  28.        if Vysledek then
  29.        begin
  30.         Caption:='OK';
  31.  
  32.        end;
  33.  

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1209
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Požadavek na získání tokenu na EGD distribuci
« Odpověď #1 kdy: 30-01-2025, 20:55:28 »
Content-Type: application/json

Offline Jirka

  • Guru
  • *****
  • Příspěvků: 502
  • Karma: 9
    • Verze Delphi: XE2
Re:Požadavek na získání tokenu na EGD distribuci
« Odpověď #2 kdy: 30-01-2025, 21:11:59 »
Content-Type: application/json

Pořád to nejde  , pokud to doplním do hlavičky
Kód: Delphi [Vybrat]
  1. HTTP.Headers.Add('Content-Type: application/json');
tak se mi vrátí
Kód: Delphi [Vybrat]
  1. {"error":"invalid_request","message":"nevalidni vstupni data: invalid_request"}

pokud nechám hlavičky prázdné tak se mi vrátí toto:

 
Kód: Delphi [Vybrat]
  1. <html>
  2. <head><title>403 Forbidden</title></head>
  3. <body>
  4. <center><h1>403 Forbidden</h1></center>
  5. <hr><center>Microsoft-Azure-Application-Gateway/v2</center>
  6. </body>
  7. </html>
  8.  

Zkoušel jsem to poslat pomocí aplikaci v C# a taky bez problémů.

Moc by mi pomohlo kdyby to někdo vyzkoušel poslat pomocí synapse

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1209
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Požadavek na získání tokenu na EGD distribuci
« Odpověď #3 kdy: 30-01-2025, 21:49:42 »
Používám Indy, takže moc nepomůžu, ale tipoval bych, že se špatně pošle hlavička.

Content-Type je standardní hlavička, která tam standardně je. Přidáním přes Headers tam bude asi 2x.
Co třeba toto?
HTTP.MimeType := 'application/json'

Offline Jirka

  • Guru
  • *****
  • Příspěvků: 502
  • Karma: 9
    • Verze Delphi: XE2
Re:Požadavek na získání tokenu na EGD distribuci
« Odpověď #4 kdy: 02-02-2025, 13:31:44 »
Tak jsem to nakonec vzdal a udělal jsem si DLL v C#  a to volám z Delphi přes  Host := TJclClrHost.Create('v4.0.30319');

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1209
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:Požadavek na získání tokenu na EGD distribuci
« Odpověď #5 kdy: 02-02-2025, 14:05:53 »
Ale určitě to funguje

Kód: Delphi [Vybrat]
  1. var
  2.   sList: TStringList;
  3.   sData: TStringStream;
  4.   HTTP: THTTPSend;
  5. begin
  6.   HTTP := THTTPSend.Create;
  7.   sList := TStringList.Create;
  8.   sData := TStringStream.Create('{"grant_type": "client_c...');
  9.   try
  10.     HTTP.MimeType := 'application/json';
  11.     HTTP.Document.LoadFromStream(sData);
  12.     if HTTP.HTTPMethod('POST', 'https://idm.distribuce24.cz/oauth/token') then
  13.       sList.LoadFromStream(HTTP.Document);
  14.  
  15.     ShowMessage(sList.Text);
  16.   finally
  17.     sList.Free;
  18.     HTTP.Free;
  19.   end;
  20. end;

Offline Jirka

  • Guru
  • *****
  • Příspěvků: 502
  • Karma: 9
    • Verze Delphi: XE2
Re:Požadavek na získání tokenu na EGD distribuci
« Odpověď #6 kdy: 03-02-2025, 10:35:56 »
Tak po aktualizaci Synapse, Opensll  a přidání  HTTP.MimeType := 'application/json';
 se to rozběhlo

Díky za pomoc