Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TRESTClient mit ProxyServer und UserName/Passwort (https://www.delphipraxis.net/191701-trestclient-mit-proxyserver-und-username-passwort.html)

sahimba 11. Feb 2017 17:55


TRESTClient mit ProxyServer und UserName/Passwort
 
Moin,

ich stolpere gerade über ein Problem, welches sich so auch im REST Debugger zeigt und, soweit ich nun debuggt habe, ein Fehler in den Delphi REST und genutzten Klassen ist.
Konfiguriere ich für den Zugriff einen ProxyServer (bspw. 192.168.168.55) nebst Port funktioniert alles soweit.
Gebe ich nun jedoch zusätzlich einen ProxyUsernamen sowie ProxyPassword an, schlägt der Aufruf gleich fehl: "Invalid URL 192.168.168.55").

In meiner Verzweiflung bin ich nun schon bei unschönsten Versuchen der Form
Delphi-Quellcode:
  // ugly hack test
  LProxyParams := TCustomRESTClientAccess(Self).FHTTPClient.ProxyParams;
  TProxyParamsAccess(LProxyParams as TObject).FProxySettings.Scheme := 'https';
Ist jemand auch schon über dieses Problem gestolpert und hat einen funktionierenden Hack/Würgaround gefunden?

Ach so... Delphi REST Debugger Seattle und Berlin zeigen selbiges Verhalten.

Danke und Grüße.

sahimba 11. Feb 2017 18:17

AW: TRESTClient mit ProxyServer und UserName/Passwort
 
Zur Ergänzung, der Fehler passiert genau hier (unit System.Net.URLClient):

Delphi-Quellcode:
function TCredentialsStorage.FindCredentials(AnAuthTargetType: TAuthTargetType;
  const ARealm, AURL, AUser: string): TCredentialArray;
[...]
begin
    [...]
    if AURL = '' then
      LHost := ''
    else
      LHost := TURI.Create(AURL).Host;
Als AURL wird der konfigurierte ProxyServer übergeben, hier also die oben genannte IP-Adresse. Debuggt man dann weiter landet man in procedure TURI.DecomposeURI(const AURIStr: string). Und die IP-Adresse ist nun einmal keine URI. Wie gesagt: ohne ProxyUserName und ProxyPassword geht es. Ich bin kurz vor der Verzweiflung, einen CodeHook für die DecomposeURI einzuführen um zu schauen, auf welchen Fehler ich dann stosse :lol:

wra 21. Okt 2019 21:28

AW: TRESTClient mit ProxyServer und UserName/Passwort
 
Hallo,

Ich vermute, dass das ein Bug in der HTTP-Client-Library war. In Delphi Rio tritt das Problem nicht mehr auf.
Es gibt folgende Workarounds, wenn man nicht gleich ein Delphi-Update machen will:

1. Das Property ProxyServer mit einem Schema versehen (also 'http://proxyserver-adresse' verwenden statt 'proxyserver-adresse'). Ob http oder https spielt keine Rolle.

2. Den Source-Code von System.Net.URLClient.pas patchen und in der Methode TURLClient.SetProxySettings nach Zeile 1814 Folgendes einfügen:

if LURI.FScheme = '' then
LURI.FScheme := TURI.SCHEME_HTTP;

Das entspricht der Korrektur, die Embarcadero in Delphi Rio vorgenommen hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 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