AGB  ·  Datenschutz  ·  Impressum  







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

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
Seite 9 von 9   « Erste     789   
NicoleWagner

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

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

  Alt 29. Dez 2018, 23: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
NicoleWagner

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

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

  Alt 29. Dez 2018, 23: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.508 Beiträge
 
Delphi 7 Professional
 
#83

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

  Alt 29. Dez 2018, 23: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
 
#84

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

  Alt 3. Jan 2019, 21: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 22: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
763 Beiträge
 
Delphi 11 Alexandria
 
#85

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

  Alt 3. Jan 2019, 23: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
Delphi.Narium

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

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

  Alt 4. Jan 2019, 12:47
HTTP/1.1 500 Internal Server Error heißt eigentlich, dass die Gegenseite schon irgendwie antwortet, aber halt dabei innerhalb der Gegenseite ein Fehler auftritt.

Vermutlich kann dieser Fehler erst gemeldet werden, wenn die Verbindung bereits erfolgreich hergestellt wurde.

Hast Du auf der VM 'nen Browser?
Dann kannst Du die PDF (höchstwahrscheinlich) mit dem anzeigen lassen. Einfach mal den Browser öffnen und die PDF aus dem Explorer in den Browser ziehen oder halt über das Menü Datei / Datei öffnen auswählen.

Geht das nicht, dann die Datei mal mit Notepad öffnen. Solange Du sie nicht mit Notepad speicherst, sollte das gehen. PDF-Dateien beginnen in der Regel mit der Zeichenfolge %PDF-1.4.
Wenn in der PDF dort was anderes steht, teile uns das bitte mit (sofern es Infos sind, die Du veröffentlichen kannst / darfst).

Die Funktion THTTPFileDownload.DownloadFile bitte ändern:
Delphi-Quellcode:
function THTTPFileDownload.DownloadFile(const aFileUrl: string; const aDestinationFile: string): Boolean;
var
 LDestStream: TFileStream;
 aPath: string;
 s : String;
begin
 try
  ResetVars;
  aPath := ExtractFilePath(aDestinationFile);

  if aPath <> 'then
   ForceDirectories(aPath);

  LDestStream := TFileStream.Create(aDestinationFile, fmCreate);
  try
   try
     Get(aFileUrl, LDestStream);
     Result := True;
   except
    on e : Exception do begin
      s := 'ResponseCode: ' + IntToStr(ResponseCode) + #13
         + 'ResponseText: ' + ResponseText + #13
         + 'Server: ' + Response.Server + #13
         + 'Location: ' + Response.Location + #13
         + 'AcceptPatch: ' + Response.AcceptPatch + #13
         + 'AcceptRanges: ' + Response.AcceptRanges + #13
         + 'CharSet: ' + Response.CharSet + #13
         + 'CacheControl: ' + Response.CacheControl + #13
         + 'Date: ' + DateTimeToStr(Response.Date) + #13
         + 'Expires: ' + DateTimeToStr(Response.Expires) + #13
         + 'LastModified: ' + DateTimeToStr(Response.LastModified) + #13
         + 'TransferEncoding: ' + Response.TransferEncoding + #13
      ;
      case Response.ResponseVersion of
        pv1_0 : s := s + 'ResponseVersion: 1.0' + #13;
        pv1_1 : s := s + 'ResponseVersion: 1.1' + #13;
      else
        s := s + 'ResponseVersion: unbekannt' + #13;
      end;
      s := s + #13#13 + e.Message;
      MessageDlg(s,mtError,[mbOk],0);
   end;
  finally
   FreeAndNil(LDestStream);
  end;
 except
  on e : Exception do begin
    Result := False;
    MessageDLG(e.Message,mtError,[mbOk],0);
  end;
 end;
end;
Bitte informiere uns über die daraus resultierende Fehlermeldung. (Sofern da Angaben drinne sind, die Du nicht zeigen darfst, anonymisiere sie bitte so, dass der ursprüngliche Sinn der Aussage erhalten bleibt.)

Da das Ganze hier nur "hingedaddelt" ist, kann ich Schreib-/Syntaxfehler nicht ausschließen.
  Mit Zitat antworten Zitat
NicoleWagner

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

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

  Alt 5. Jan 2019, 17:14
jaaaaaaaaaaaaaaaaaaaaaaaaaa !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Es geht.

Danke Leute, danke, dass Ihr mir 10 Seiten lang zur Seite gestanden habt.

Michael II schrieb den Satz, der der letzte Schritt war:
Ich muss die IP-Nummer wieder zurückstellen auf den Namen der Domain.

Doch es waren wohl alle Faktoren, ganz wesentlich das Erzwingen vom Protokolls TSL 1.2
und natürlich erst mal herauszufinden, dass der Fehler dort liegt. Und das Auslesen, welchse Protokoll ich konkret brauche.

Ich habe sehr viel gelernt. Danke auch allen für die vielen Codeschnipsel und Links.
Jetzt mache ich mich mal dran, die Testumgebung in mein Programm zu implementieren.


Nicole
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 9 von 9   « Erste     789   


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 18:46 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