AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi System.Net.HTTPClientComponent
Thema durchsuchen
Ansicht
Themen-Optionen

System.Net.HTTPClientComponent

Ein Thema von Detlev · begonnen am 16. Dez 2022 · letzter Beitrag vom 9. Feb 2023
Antwort Antwort
Seite 1 von 2  1 2      
Detlev

Registriert seit: 16. Nov 2014
Ort: Hamburg
46 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

System.Net.HTTPClientComponent

  Alt 16. Dez 2022, 16:25
Ich nutze Delphi 10.2 Tokyo und versuche gerade, einfache Methoden für den Zugriff über https:// zu finden.

System.Net.HTTPClientComponent war mir bisher unbekannt. Ich habe hier zwei Versuche, die beide nicht funktionieren. Die Dokumentation ist dazu furchtbar dürftig.

Delphi-Quellcode:
procedure TForm1.SpeedNETGet2Click(Sender: TObject);
var
  AHTTPClient : TNetHTTPClient;
  AResponseStream : TMemoryStream;
begin
  AHTTPClient := TNetHTTPClient.Create(nil);
  AResponseStream := TMemoryStream.Create;

  MemoGetSSL2.Text := AHTTPClient.Get('https://de.wikipedia.org/wiki/Wikipedia:Hauptseite', AResponseStream).ContentAsString;

  AResponseStream.Free;
  AHTTPClient.Free;
end;
SpeedNETGet2Click crasht bei https mit ENetHTTPCertificateException "Serverzertifikat ungültig oder nicht vorhanden", aber funktioniert mit normalen http-Seiten.

Was mache ich falsch?

Unterstützt die Komponenten überhaupt https?
Detlev

Geändert von Detlev (16. Dez 2022 um 16:50 Uhr)
  Mit Zitat antworten Zitat
Detlev

Registriert seit: 16. Nov 2014
Ort: Hamburg
46 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: System.Net.HTTPClientComponent

  Alt 16. Dez 2022, 16:47
Habe die Originalfrage gekürzt auf das verbliebende Unwissen. Habe gerade herausgefunden, dass man THTTPRequest mit einem THTTPClient verbinden muss. Dann frage ich mich aber: Was soll das? Hat jemand darauf eine Antwort, warum man dann nicht gleich den HTTPClient verwendet, sondern umständlich einen HTTPRequest verbindet?!

Wie auch immer, https funktioniert so nicht, http aber schon. Die zentrale Frage bleibt also.

Delphi-Quellcode:
procedure TForm1.SpeedNETGetClick(Sender: TObject);
var
  AHTTPRequest : TNetHTTPRequest;
  AHTTPClient : TNetHTTPClient;

  AResponseStream : TMemoryStream;
  AString : String;
begin
  AHTTPClient := TNetHTTPClient.Create(nil);

  AHTTPRequest := TNetHTTPRequest.Create(nil);
  AHTTPRequest.Client := AHTTPClient;

  AResponseStream := TMemoryStream.Create;

  MemoGetSSL2.Text := AHTTPRequest.Get('http://squarenmr.com', AResponseStream).ContentAsString;

  AResonseStream.Free;
  AHTTPRequest.Free;
  AHTTPClient.Free;
Detlev

Geändert von Detlev (16. Dez 2022 um 16:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#3

AW: System.Net.HTTPClientComponent

  Alt 16. Dez 2022, 16:53
Für einen simplen Abruf einer Seite kann man natürlich gleich den Client verwenden. In der Regel sind die Anforderungen aber deutlich komplexer und lassen sich mit einem Client und mehreren Requests flexibler gestalten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Detlev

Registriert seit: 16. Nov 2014
Ort: Hamburg
46 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: System.Net.HTTPClientComponent

  Alt 16. Dez 2022, 17:03
OK, danke. Habe inzwischen herausgefunden, dass die TNEThttpClient-Sache als Komponente auf einem Formular gedacht sind und man ebenso gut auch THTTPClient direkt verwenden kann, ohne Komponenten-Wrapper. Das war mir vorher nicht klar.

Trotzdem bleibt die entscheidende Frage, wie man ggf. https zum Laufen bekommt.
Detlev
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#5

AW: System.Net.HTTPClientComponent

  Alt 16. Dez 2022, 17:31
Also hier läuft das ohne Probleme (mit einfacherer Lösung für Stream zu String):
Delphi-Quellcode:
var
  AHTTPClient : TNetHTTPClient;
  AResponseStream : TStringStream;
  AString : String;
begin
  AHTTPClient := TNetHTTPClient.Create(nil);
  try
    AResponseStream := TStringStream.Create;
    try
      AHTTPClient.Get('https://de.wikipedia.org/wiki/Wikipedia:Hauptseite', AResponseStream);
      AString := AResponseStream.DataString;
    finally
      AResponseStream.Free;
    end;
  finally
    AHTTPClient.Free;
  end;
  Memo1.Text := AString;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Detlev

Registriert seit: 16. Nov 2014
Ort: Hamburg
46 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: System.Net.HTTPClientComponent

  Alt 16. Dez 2022, 17:43
Bei dir läuft das?! Das ist ja verdammt seltsam. Bei mir wirft es den Zertifikatsfehler.
Detlev
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#7

AW: System.Net.HTTPClientComponent

  Alt 16. Dez 2022, 17:50
Kannst du denn die URL im Browser aufrufen? Auch in verschiedenen?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#8

AW: System.Net.HTTPClientComponent

  Alt 16. Dez 2022, 18:30
Bei dir läuft das?! Das ist ja verdammt seltsam. Bei mir wirft es den Zertifikatsfehler.
Das ist möglich, weil das Zertifikat über den Windows Zertifikatsspeicher geprüft wird. Fehlt dort ein Root-Zertifikat, kann zu diesem Server weder über einen Browser noch über eine andere Anwendung, die diesen Zertifikatsspeicher verwendet, eine gesicherte Verbindung hergestellt werden.

Manche Browser wie z.B. Firefox verwenden einen eigenen Zertifikatsspeicher, daher kann damit ein Verbindungsaufbau funktionieren der mit einem anderen Browser nicht funktioniert (und umgekehrt).

System.Net.HTTPClient hat anscheinend eine Property in der Informationen zu fehlgeschlagenem Verbindungsaufbau stehen können: SecureFailureReasons

https://docwiki.embarcadero.com/Libr...FailureReasons

Eventuell steht darin etwas Hilfreiches.

(Quelle: https://stackoverflow.com/a/71507061/80901)
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Detlev

Registriert seit: 16. Nov 2014
Ort: Hamburg
46 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: System.Net.HTTPClientComponent

  Alt 16. Dez 2022, 19:01
Kannst du denn die URL im Browser aufrufen? Auch in verschiedenen?
Klar kann ich Wikipedia in jedem Browser öffnen... das muss an der Implementation in Delphi liegen.
Detlev
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#10

AW: System.Net.HTTPClientComponent

  Alt 16. Dez 2022, 22:52
Oder an den am Ende verwendeten Windows-Funktionen.

Aber an Delphi liegt es ja offenbar nicht, sonst würde es ja bei mir auch nicht funktionieren. Ich habe es extra auch mit 10.2 versucht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:34 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