AGB  ·  Datenschutz  ·  Impressum  







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

Delphi 12 ist offiziell da!!!

Ein Thema von wjjw · begonnen am 7. Nov 2023 · letzter Beitrag vom 29. Nov 2023
 
Rolf Frei

Registriert seit: 19. Jun 2006
656 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Delphi 12 ist offiziell da!!!

  Alt 8. Nov 2023, 14:24
Danke für die Anregung, das nochmal zu testen. Der Fehler ist jetzt etwas schwieriger nachzuvollziehen als wahrscheinlich im ursprünglichen Bug-Report vom August. Er tritt jetzt nur noch auf, wenn man den Parameter selbst in die URL mit reinschreibt und nicht mehr, wenn man ihn per "AddParameter" setzt. In D11.2 funktionierten allerdings beide Wege völlig fehlerlos und so sollte es auch weiterhin sein. Es gibt ja diverse Gründe, warum es mal vorkommen kann, dass man nicht AddParameter nutzt, sondern die URL selbst zusammensetzt - in REST-APIs könnte es auch eine durch einen Call vorgegebene URL sein, um weitere Ergebnisse abzurufen (macht die Graph API von Microsoft zum Beispiel). Wäre blöd, wenn Delphi da reingrätscht.

Aber klar, so fällt der Fehler weniger auf.

Beispielprogramm:

Delphi-Quellcode:
program restSpace;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, REST.Client;


var
  myRest: TRESTClient;
  myQuery: TRESTRequest;
  resultText: string;

begin
  myRest:=TRESTClient.Create('https://httpbin.org/');
  myQuery:=TRESTRequest.Create(nil);
  myQuery.Client:=myRest;
  try
    { TODO -oUser -cConsole Main : Code hier einfügen }
    myQuery.Resource:='get?param=hello world';
    myQuery.AddParameter('param_added','hello world');
    myQuery.Execute;

    if (myQuery.Response.StatusCode=200) and (myQuery.Response.JSONValue<>nil) then begin
      resultText:=myQuery.Response.JSONValue.GetValue<string>('args.param','!! Not found !!');
      Writeln(resultText);
      resultText:=myQuery.Response.JSONValue.GetValue<string>('args.param_added','!! Not found !!');
      Writeln(resultText);
      Readln;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  myQuery.Free;
  myRest.Free;
end.
Ausgabe mit D11.2:

Code:
hello world
hello world
Ausgabe mit D12:

Code:
hello%20world
hello world
Tja, wie vorgehen?
Dein Code ist so falsch.
    myQuery.Resource:='get?param=hello world'; Das darfst du nicht so machen. Du gibts hier eine ungültige URL an. Korrekt wäre:
Delphi-Quellcode:
    
    myQuery.Resource:='get?param=' + TNetEncoding.URL.EncodeForm('hello world');
Sollte deine Serveranwendung wirklich fälschlicherweise ein %20 benötigen, kannst du anstatt EncodeForm() einfach nur Encode() nutzen.

Ich vermutet der Fix für RSP-38522 ist somit schon richtig, allerdings müsste man nun im REST Teil eventuell auch noch was anpassen/Korrigieren. Wenn deine Resource aber Parameter entählt solltest du die Codierung vorzugsweise selber machen, damit du da die Kontrolle hast, was und wie du das codierst.

Geändert von Rolf Frei ( 8. Nov 2023 um 14:36 Uhr)
  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 10:32 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