AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Datei aus dem Internet herunterladen - geht nicht mehr!

Datei aus dem Internet herunterladen - geht nicht mehr!

Ein Thema von NicoleWagner · begonnen am 8. Dez 2018 · letzter Beitrag vom 5. Jan 2019
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.600 Beiträge
 
Delphi 7 Professional
 
#1

AW: Datei aus dem Internet herunterladen - geht nicht mehr!

  Alt 29. Dez 2018, 19:35
Habe keine Ahnung, wie Indy mit den Zertifikatsprobleme umgeht.

Alleine die Tatsache, dass Du derartige Fehlermeldungen bekommst, bedeutet aber schonmal: Der sich der IE und der Server, der die PDF zu liefern hat, unterhalten können. Die auftretenden Probleme sind wohl eher auf eine nicht wirklich optimale Konfiguration des Servers zurückzuführen.

Hier könnte jetzt aber ein Versuch mit den Indy-Komponenten eventuell erfolgreich sein.

Ein bisserl Info eventuell hier:
http://germanylandofinnovation.com/q...zertifikat-ssl
https://stackoverflow.com/questions/...ertificate-ssl
https://forums.embarcadero.com/threa...hreadID=118720

Mir scheint, dass man mit den Indys und OpenSSL die Zertifikatsprüfung ignorieren / überspringen kann, so dass dort das Zertifikatsproblem nicht auftritt. Wäre einen Versuch wert.

Was sagt Dir denn jetzt THTTPFileDownload mit der zusätzlichen Zeile IOHndl.SSLOptions.SSLVersions := [sslvTLSv1_2]; ?
Funktioniert es so eventuell schon, wenn nein, welche Fehlermeldung bekommst Du?
  Mit Zitat antworten Zitat
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Datei aus dem Internet herunterladen - geht nicht mehr!

  Alt 29. Dez 2018, 21:41
---------------------------
Project_download_url
---------------------------
Fehler beim Verbinden mit SSL.
error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version.
---------------------------
OK
---------------------------

ein kleiner Schritt weiter, denn ich kann jetzt einmal https anzeigen.

// ShowMessage(idHTTP1.Get('https://www.delphipraxis.net/')); => das wir jetzt erstmals angezeigt!!
ShowMessage(idHTTP1.Get('https://192.124.xxxxx/....pdf')); => das erzeugt obige Fehlermeldung

Ich könnte mir vorstellen, dass irgendeine Sicherheitseinstellung des Systems das Problem ist. Der IE unter Win 7 war noch immer ganz tief im System vernetzt. Ich hatte da vor Jahren unglaubliche Probleme mit einem Programm, das der Support mit einer Konfiguration im IE gelöst hatte, die mir ganz komisch vorkam.
Dieses Zertifikat ist aus Ami-Land von Go Daddy. Es besteht auf ionos alle Prüfungen und ist von einer hochseriösen Firma aufgesetzt. Allerdings kann ich dort nicht fragen. Denn sie sind recht groß und ich bin klein. Auch will ich dort nicht sagen, dass ich die Datei, die grundsätzlich für Kundendienst / Einsicht verfügbar ist, maschinell verarbeite, auch wenn es nur für mich selbst ist.
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
562 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Datei aus dem Internet herunterladen - geht nicht mehr!

  Alt 29. Dez 2018, 21:57
Dh. du probierst TLS 1.0

---------------------------
Project_download_url
---------------------------
Fehler beim Verbinden mit SSL.
error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version.
---------------------------
OK
---------------------------

ein kleiner Schritt weiter, denn ich kann jetzt einmal https anzeigen.

// ShowMessage(idHTTP1.Get('https://www.delphipraxis.net/')); => das wir jetzt erstmals angezeigt!!
ShowMessage(idHTTP1.Get('https://192.124.xxxxx/....pdf')); => das erzeugt obige Fehlermeldung

Ich könnte mir vorstellen, dass irgendeine Sicherheitseinstellung des Systems das Problem ist. Der IE unter Win 7 war noch immer ganz tief im System vernetzt. Ich hatte da vor Jahren unglaubliche Probleme mit einem Programm, das der Support mit einer Konfiguration im IE gelöst hatte, die mir ganz komisch vorkam.
Dieses Zertifikat ist aus Ami-Land von Go Daddy. Es besteht auf ionos alle Prüfungen und ist von einer hochseriösen Firma aufgesetzt. Allerdings kann ich dort nicht fragen. Denn sie sind recht groß und ich bin klein. Auch will ich dort nicht sagen, dass ich die Datei, die grundsätzlich für Kundendienst / Einsicht verfügbar ist, maschinell verarbeite, auch wenn es nur für mich selbst ist.
  Mit Zitat antworten Zitat
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Datei aus dem Internet herunterladen - geht nicht mehr!

  Alt 29. Dez 2018, 22:12
Wie kann ich Deine geniale Zeile:

//IOHndl.SSLOptions.SSLVersions := [sslvTLSv1_2]; // erzwingt TSL-Protokoll 1.2
so anwenden, dass ich HIER den Fehler richtig ausgebe?


ShowMessage(idHTTP1.Get('https://*****.pdf'));

Indy, - ich brauche es nie wieder, auch wenn es mich sehr interessieren würde.
Ich arbeite an einem finanzmathematischen Projekt. Die Dinge, die ich dazu brauche, hätte ich auch mit Delphi 5 oder so gestalten können. Uralte höhere Mathematik. Nur dieser eine Input läuft eben soviel komfortabler, wenn ich den Input aus dem pdf-File reinbastle.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.600 Beiträge
 
Delphi 7 Professional
 
#5

AW: Datei aus dem Internet herunterladen - geht nicht mehr!

  Alt 29. Dez 2018, 22:08
Ist das jetzt 'ne Fehlermeldung mit THTTPFileDownload?

Bitte poste den aktuellen Quelltext Deiner Routine. Es ist momentan nicht nachvollziehbar, woher der Fehler jetzt genau kommt.

Wenn Du eine Komponente TIDHttp nutzt, hast Du ihr auch 'ne TIdSSLIOHandlerSocketOpenSSL zugewiesen und dort bei SSLOptions.SSLVersion.SSLvTSL1_2 auf True gesetzt und die übrigen auf False?

Die Fehlermeldung läßt darauf schließen, dass dem nicht so ist.

Zitat von MichaelT:
Die Meldung muss nicht zwingend zum Fehler passen. Lass dir die Zertifikatskette anzeigen und schauen ob die Zertifikate aktuell sind. Das sorgt gerne für Verwirrung.

Kleine Anmerkung zum Download mit dem IE welche ich beim Schmökern im Netz fand. Funktion DeleteUrlCacheEntry nicht vergessen ansonsten bleibt die File im Cache und wird nicht nochmal runtergeladen.

Ansonsten viel Spaß. Verstehe einer warum man alles in eine Applikation muss einbauen. Aber gut jeder wie er will.

Ich würde mir die File so wie in dem zu Beginn geposteten Code holen.

In einer Mußestunde schaust du dir dann zumindest mal Chilikat an oder Indy in Depth.
Das das Zertifikat nicht in Ordnung ist, steht schon weiter oben, da hilft weiterforschen nicht wirklich. Der IE scheitertete bisher daran, dass er kein TLS 1.2 nutzte. Nachdem das umkonfiguriert wurde, scheitert er an veraltetem / fehlerhaft konfiguriertem Zertifikat.

Und das der zu Beginn gepostete Code in dieser Konstellation nicht funktioniert, da er kein TLS 1.2 nutzt, wurde auch festgestellt.

Also: Das Zertifikat auf dem Server ist so, wie es ist, nicht in Ordnung.
Der Server verlangt die Nutzung von TLS 1.2.

Es sollte also TLS 1.2 genutzt werden und ein Weg gesucht werden, dem das Zertifikat egal ist. Auch dafür wurden entsprechende Hinweise verlinkt.
  Mit Zitat antworten Zitat
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Datei aus dem Internet herunterladen - geht nicht mehr!

  Alt 29. Dez 2018, 22:15
Danke für die Links zu den Zertifikaten. Sie erschlagen mich.
Vielleicht geht es, wenn es früher am Tag ist (23:15).
Ich habe sie einmal alle aufgerufen und lasse sie im Browser geöffnet.

Prosit 2019 allen, die noch mitlesen um die nahen Feiertage!
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.600 Beiträge
 
Delphi 7 Professional
 
#7

AW: Datei aus dem Internet herunterladen - geht nicht mehr!

  Alt 29. Dez 2018, 22:25
Welchen Quelltext nutzt Du denn jetzt aktuell bitte?

Nur das?

ShowMessage(idHTTP1.Get('https://*****.pdf'));
Sonst nix?

Wo wird die TIdSSLIOHandlerSocketOpenSSL-Komponente zugewiesen und wie ist sie konfiguriert?

Oder nutzt Du den Quelltext aus Post #38?
Dort bitte Zeile einfügen:
Delphi-Quellcode:
 // im Construtor
 ReadTimeout := 3000;
 ConnectTimeout := 3000;
 IOHndl.ReadTimeout := 3000;
 IOHndl.ConnectTimeout := 3000;
 // hier einfügen:
 IOHndl.SSLOptions.SSLVersions := [sslvTLSv1_2]; // erzwingt TSL-Protokoll 1.2
  Mit Zitat antworten Zitat
NicoleWagner

Registriert seit: 6. Jul 2010
167 Beiträge
 
Delphi XE3 Professional
 
#8

AW: Datei aus dem Internet herunterladen - geht nicht mehr!

  Alt 3. Jan 2019, 20:24
Bitte gehe in Zeile 180 oder springe auf 'Form1.SpeedButton1Click'.
Darunter stehen 2 Methoden, in denen ich verschiedene Zeilen probierte.
Jeweils darunter stehen die Fehlermeldungen, die auf diese Zeilen folgten:
Delphi-Quellcode:
unit Unit_Download_Url;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, VCLTee.TeCanvas,
  Vcl.Buttons, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IdSSLOpenSSL, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL;

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    IdHTTP1: TIdHTTP;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    SpeedButton3: TSpeedButton;

    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;

//******************************************************************************
implementation

{$R *.dfm}


type
 THTTPFileDownload = class(TIdHTTP)
 private
  FProgress: Integer;
  FWorkCount, FBytesTransfered, FBytesToTransfer, FBytesTransferedEnd: Int64;
  FOnChange, FOnEnd: TNotifyEvent;
  IOHndl: TIdSSLIOHandlerSocketOpenSSL;
  procedure ResetVars;
  procedure HTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
  procedure HTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
  procedure HTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  procedure SetProgress(const Value: Integer);
  procedure SetOnChange(const Value: TNotifyEvent);
  procedure SetOnEnd(const Value: TNotifyEvent);
 public
  constructor Create(AOwner: TComponent);
  destructor Destroy; override;
  function DownloadFile(const aFileUrl: string; const aDestinationFile: string): Boolean;

  property Progress: Integer read FProgress write SetProgress;
  property WorkCount: Int64 read FWorkCount write FWorkCount;
  property BytesTransfered: Int64 read FBytesTransfered write FBytesTransfered;
  property BytesTransferedEnd: Int64 read FBytesTransferedEnd write FBytesTransferedEnd;
  property BytesToTransfer: Int64 read FBytesToTransfer;
  property OnChange: TNotifyEvent read FOnChange write SetOnChange;
  property OnEnd: TNotifyEvent read FOnEnd write SetOnEnd;
 end;

//******************************************************************************

constructor THTTPFileDownload.Create(AOwner: TComponent);
begin
 inherited;

 IOHndl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
 Request.BasicAuthentication := True;
 HandleRedirects := True;
 IOHandler := IOHndl;

 ReadTimeout := 3000;
 ConnectTimeout := 3000;
 IOHndl.ReadTimeout := 3000;
 IOHndl.ConnectTimeout := 3000;

 OnWork := HTTPWork;
 OnWorkBegin := HTTPWorkBegin;
 OnWorkEnd := HTTPWorkEnd;
end;

destructor THTTPFileDownload.Destroy;
begin
 IOHndl.Free;

 inherited;
end;

procedure THTTPFileDownload.ResetVars;
begin
 Progress := 0;
 FWorkCount := 0;
 FBytesToTransfer := 0;
 FBytesTransfered := 0;
end;

function THTTPFileDownload.DownloadFile(const aFileUrl: string; const aDestinationFile: string): Boolean;
var
 LDestStream: TFileStream;
 aPath: string;
begin
 try
  ResetVars;
  aPath := ExtractFilePath(aDestinationFile);

  if aPath <> 'then
   ForceDirectories(aPath);

  LDestStream := TFileStream.Create(aDestinationFile, fmCreate);
  try
   Get(aFileUrl, LDestStream);
   Result := True;
  finally
   FreeAndNil(LDestStream);
  end;
 except
  Result := False;
 end;
end;

procedure THTTPFileDownload.HTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
begin
 if BytesToTransfer = 0 then // No Update File
  Exit;

 WorkCount := AWorkCount;
 Progress := Round((AWorkCount / BytesToTransfer) * 100);
 BytesTransfered := (BytesToTransfer div 100) * Progress;
end;

procedure THTTPFileDownload.HTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
 FBytesToTransfer := AWorkCountMax;
end;

procedure THTTPFileDownload.HTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
 FBytesTransferedEnd := FBytesTransfered;
 if Assigned(FOnEnd) then
  FOnEnd(Self);

 FWorkCount := 0;
 FBytesToTransfer := 0;

 ResetVars;

 Progress := 100;
end;

procedure THTTPFileDownload.SetOnChange(const Value: TNotifyEvent);
begin
 FOnChange := Value;
end;

procedure THTTPFileDownload.SetOnEnd(const Value: TNotifyEvent);
begin
 FOnEnd := Value;
end;

procedure THTTPFileDownload.SetProgress(const Value: Integer);
begin
 FProgress := Value;

 if Assigned(FOnChange) then
  FOnChange(Self);
end;
//******************************************************************************
//******************************************************************************

procedure TForm1.SpeedButton1Click(Sender: TObject); // forciert TSL 1.2
var
  DL: THTTPFileDownload;
begin
  DL := THTTPFileDownload.Create(nil);
  try

  DL.IOHndl.SSLOptions.SSLVersions := [sslvTLSv1_2]; // erzwingt TSL-Protokoll 1.2

  DL.DownloadFile('https://www.delphipraxis.net/','C:\Termin\xxx.pdf');

  // das geht vermutlich, es kommt jedenfalls keine Fehlermeldung,
  // doch was genau passiert liegt im Nebel und debuggen würde zu lange dauern,
  // weil ich pdf Files in der VM nicht mit Doppelklick öffnen kann.


    DL.DownloadFile('https://....Link.pdf','C:\Termin\xxx.pdf'); // => zeigt auf meine Datei im Internet


// ---------------------------
//Benachrichtigung über Debugger-Exception
//---------------------------
//Im Projekt Project_Download_Url.exe ist eine Exception der Klasse EIdHTTPProtocolException mit der Meldung 'HTTP/1.1 500 Internal Server Error' aufgetreten.
//---------------------------
//Anhalten Fortsetzen Hilfe
//---------------------------


  finally
    DL.Free;
  end;
end;
//******************************************************************************

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
    ShowMessage(idHTTP1.Get('https://192.124.249.57/documents/shared/margins/margins.pdf'));

// ---------------------------
//Benachrichtigung über Debugger-Exception
//---------------------------
//Im Projekt Project_Download_Url.exe ist eine Exception der Klasse EIdOSSLUnderlyingCryptoError mit der Meldung 'Fehler beim Verbinden mit SSL.
//error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version' aufgetreten.
//---------------------------
//Anhalten Fortsetzen Hilfe
//---------------------------


    // gefolgt von



//---------------------------
//Project_download_url
//---------------------------
//Fehler beim Verbinden mit SSL.//
//error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version.
//---------------------------
//OK
//---------------------------




end;


end.

Geändert von Luckie ( 3. Jan 2019 um 21:12 Uhr) Grund: Code-tags eingefügt. Beim nächsten Mal bitte selber machen. Danke.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
778 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Datei aus dem Internet herunterladen - geht nicht mehr!

  Alt 3. Jan 2019, 22:17
Das Wild Card Zertifikat wurde für sucuri.net und alle Subdomains ausgestellt [und nicht für den Server und alle darauf gehosteten Domains].

Ersetze also die IP Adresse durch <subdomain>.sucuri.net
Michael Gasser
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:51 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