AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Delphi 10.3 Rio: THTTPClient und Proxy; Status 407 authenticationrequired
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 10.3 Rio: THTTPClient und Proxy; Status 407 authenticationrequired

Ein Thema von Achim Kalwa · begonnen am 8. Aug 2019 · letzter Beitrag vom 13. Aug 2019
Antwort Antwort
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
110 Beiträge
 
Delphi 12 Athens
 
#1

Delphi 10.3 Rio: THTTPClient und Proxy; Status 407 authenticationrequired

  Alt 8. Aug 2019, 10:56
Hallo *,

seit dem Umstieg von Delphi 10.2 (Tokyo) auf 10.3 (Rio) funktioniert der Zugriff auf WebServices via THTTPRIO nicht mehr, wenn zwischen meiner Anwendung (VCL, Win32/64) und dem Dienst ein Proxy mit Benutzeranmeldung steht. Auch der einfache Download einer Datei via THTTPClient.Get() funktioniert nicht mehr; es gibt einen StatusCode 407 = authenticationrequired.

Stark vereinfachtes Code-Fragment:
Code:
  LStream := TFileStream.Create(aFileName, fmCreate or fmShareExclusive);
  LClient := THTTPClient.Create;
  ResCode := LClient.Get(aURL, LStream);
  if ResCode.StatusCode = 200 then ; // 200 = OK
Compiliert mit Delphi 10.2.3 funktioniert der Download einer Datei aus dem Internet (z.B. 'https://www.7-zip.org/a/7z1900.exe'), ohne dass ich mich an unserem Proxy anmelden muss.

Derselbe Code compiliert mit Delphi 10.3.2 schlägt fehl mit Statuscode = 407: authenticationrequired

Wie bringe ich THTTPClient dazu, wieder den im System/am User eingestellten Proxy zu verwenden?

TIA
Achim
Achim
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Delphi 10.3 Rio: THTTPClient und Proxy; Status 407 authenticationrequired

  Alt 8. Aug 2019, 11:05
http://docwiki.embarcadero.com/Libra....ProxySettings
Markus Kinzler
  Mit Zitat antworten Zitat
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
110 Beiträge
 
Delphi 12 Athens
 
#3

AW: Delphi 10.3 Rio: THTTPClient und Proxy; Status 407 authenticationrequired

  Alt 8. Aug 2019, 11:21
Danke für die schnelle Antwort; aber die bringt mich nicht wirklich weiter

Muss ich jetzt wirklich die Proxy-Credentials des Anwenders selber ermitteln und an THTTPClient übergeben? Ich hatte gehofft, es gäbe da so etwas wie UseSystemProxy := True. Oder habe ich da was übersehen?

Warum funktioniert der Code mit Delphi 10.2, aber nicht mehr mit 10.3?! Eine solcher "code breaking change" müsste doch irgendwo dokumentiert sein...
Achim
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi 10.3 Rio: THTTPClient und Proxy; Status 407 authenticationrequired

  Alt 8. Aug 2019, 11:28
Weil von Indy auf etwas anderes gewechselt wurde. THTTPClient ist jetzt die plattformübergreifende Klasse der Wahl.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
110 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi 10.3 Rio: THTTPClient und Proxy; Status 407 authenticationrequired

  Alt 8. Aug 2019, 11:37
Weil von Indy auf etwas anderes gewechselt wurde. THTTPClient ist jetzt die plattformübergreifende Klasse der Wahl.
Schön und gut. Und wie kann ich dieser Klasse mitteilen, dass der in Windows bereits eingestellte Proxy verwendet werden soll?

Wenn es nur um den einfachen Download einer Datei ginge, könnte ich ja wieder auf Indy oder WinINet umschwenken. Aber es geht um WebServices mit HTTPRIO, welches intern ja ebenfalls THTTPClient verwendet.
Achim
  Mit Zitat antworten Zitat
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
110 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi 10.3 Rio: THTTPClient und Proxy; Status 407 authenticationrequired

  Alt 8. Aug 2019, 14:16
Schön und gut. Und wie kann ich dieser Klasse mitteilen, dass der in Windows bereits eingestellte Proxy verwendet werden soll?
Ich beantworte meine Frage mal selber, vielleicht hilft es ja mal jemandem:
THTTPClientHelper.UseDefaultCredentials
ist die gesuchte Einstellung.
Code:
 
  LStream := TFileStream.Create(aFileName, fmCreate or fmShareExclusive);
  LClient := THTTPClient.Create;
  LClient.UseDefaultCredentials := True; // <-- added
  ResCode := LClient.Get(aURL, LStream);
  if ResCode.StatusCode = 200 then...
Und für den SOAP-WebService muss der vom WSDL-Importer erzeugte Code ergänzt werden:
Code:
uses
  ...
  Soap.SOAPHTTPTrans; // for THTTPReqRespHelper

function GetIService(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IService;
var
  RIO: THTTPRIO;
begin
  ...
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as IService);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;

    RIO.HTTPWebNode.UseDefaultCredentials := True; // <-- added

  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
Gruß vom Teutoburger Wald,
Achim
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#7

AW: Delphi 10.3 Rio: THTTPClient und Proxy; Status 407 authenticationrequired

  Alt 8. Aug 2019, 22:38
Und für den SOAP-WebService muss der vom WSDL-Importer erzeugte Code ergänzt werden:
Code:
uses
  ...
  Soap.SOAPHTTPTrans; // for THTTPReqRespHelper

function GetIService(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IService;
var
  RIO: THTTPRIO;
begin
  ...
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as IService);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;

    RIO.HTTPWebNode.UseDefaultCredentials := True; // <-- added

  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
Gut zu wissen. Kann derjenige vom Teutoburger Wald bitte jetzt einen QP feature request oder bugreport
anlegen der fordert, dass der WSDL importer/Generator diese Zeile in Zukunft mit in den Code schreibt?

Danach bitte die Report Nummer hier melden, dann stimmen sicher einige dafür!

Grüße aus Süddeutschland
TurboMagic
  Mit Zitat antworten Zitat
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
110 Beiträge
 
Delphi 12 Athens
 
#8

AW: Delphi 10.3 Rio: THTTPClient und Proxy; Status 407 authenticationrequired

  Alt 13. Aug 2019, 10:43
Gut zu wissen. Kann derjenige vom Teutoburger Wald bitte jetzt einen QP feature request oder bugreport anlegen der fordert, dass der WSDL importer/Generator diese Zeile in Zukunft mit in den Code schreibt?

Danach bitte die Report Nummer hier melden, dann stimmen sicher einige dafür!

TurboMagic
Den WSDL-Importer zu ändern wäre nur ein Workaround. UseDefaultCredentials := True sollte per Default aktiv sein, so wie in vorherigen Delphi-Versionen. Ich habe einen Bug-Report erstellt:

https://quality.embarcadero.com/browse/RSP-25668
Achim
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 17:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz