Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Probleme mit HTTP.Get (https://www.delphipraxis.net/194492-probleme-mit-http-get.html)

ATS3788 29. Nov 2017 13:43

Probleme mit HTTP.Get
 
Hallo ich veruche Images mit Chromium down zu loaden wie in dem Post beschrieben
https://stackoverflow.com/questions/...-image-to-file
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtDlgs, IdHTTP, cefvcl, ceflib;

const
  MENU_ID_SAVE_IMAGE_AS = Ord(MENU_ID_USER_FIRST) + 1;

type
  TDownloader = class(TThread)
  private
    FURL: string;
    FFileName: string;
  protected
    procedure Execute; override;
  public
    constructor Create(const URL, FileName: string); reintroduce;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Chromium1: TChromium;
    SavePictureDialog1: TSavePictureDialog;
    procedure FormCreate(Sender: TObject);
    procedure Chromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser;
      const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
    procedure Chromium1ContextMenuCommand(Sender: TObject; const browser: ICefBrowser;
      const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer;
      eventFlags: TCefEventFlags; out Result: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TDownloader }

constructor TDownloader.Create(const URL, FileName: string);
begin
  inherited Create(False);
  FreeOnTerminate := True;
  FURL := URL;
  FFileName := FileName;
end;

procedure TDownloader.Execute;
var
  HTTPClient: TIdHTTP;
  FileStream: TFileStream;
begin
  try
    HTTPClient := TIdHTTP.Create;
    try
      FileStream := TFileStream.Create(FFileName, fmCreate);
      try
        HTTPClient.Get(FURL, FileStream);
      finally
        FileStream.Free;
      end;
    finally
      HTTPClient.Free;
    end;
  except
    // error handling ignored for this example
  end;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chromium1.Load('http://www.google.com/');
end;

procedure TForm1.Chromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
begin
  if (CM_TYPEFLAG_MEDIA in params.TypeFlags) and (params.MediaType = CM_MEDIATYPE_IMAGE) then
    model.AddItem(MENU_ID_SAVE_IMAGE_AS, 'Save image as...');
end;

procedure TForm1.Chromium1ContextMenuCommand(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer;
  eventFlags: TCefEventFlags; out Result: Boolean);
var
  SaveDialog: TSavePictureDialog;
begin
  if (commandId = MENU_ID_SAVE_IMAGE_AS) then
  begin
    SaveDialog := TSavePictureDialog.Create(nil);
    try
      // SaveDialog.FileName := <here you can extract file name from params.SourceUrl>;
      // SaveDialog.DefaultExt := <here you can extract file ext from params.SourceUrl>;
      if SaveDialog.Execute then
        TDownloader.Create(params.SourceUrl, SaveDialog.FileName);
    finally
      SaveDialog.Free;
    end;
  end;
end;
end.

Nur bei den meißten Bilder bekomme ich Schutzverletzungen
Delphi-Quellcode:
 
 HTTPClient.Get(FURL, FileStream);
Mit einem normalen Browser kann ich ohne Probleme das entsprechende Image
speichern. Das Bild, der Link ist also in Ordnung.
Hat dazu jemand eine Idee

Towmuz 29. Nov 2017 14:01

AW: Probleme mit HTTP.Get
 
Vieleicht
Delphi-Quellcode:
HTTPClient.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0';
?

TiGü 29. Nov 2017 14:15

AW: Probleme mit HTTP.Get
 
Hast du die OpenSSL-DLLs dazugetan?
Das kommt nämlich als erstes erste Exception, sobald von Bilder von https-Seiten runterladen will.
Mit Schutzverletzungen hat das wenig zu tun.

ATS3788 29. Nov 2017 14:36

AW: Probleme mit HTTP.Get
 
Danke muss ich mal schauen.

So ist es nicht so elegant geht aber auch
In das Clipboard und dann in den Image Container

Delphi-Quellcode:

procedure TCDDBCoverBrowserForm.ChromiumContextMenuCommand(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  const params: ICefContextMenuParams; commandId: Integer; eventFlags: Cardinal;
  out Result: Boolean);
begin
  Result := False;

   frame.Copy;

ATS3788 29. Nov 2017 14:37

AW: Probleme mit HTTP.Get
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was meinst Du mit OpenSSL-DLLs?
Ich habe alle Dlls von Chromium in das
Exe Folder kopiert.

Siehe Anhang

LTE5 29. Nov 2017 14:38

AW: Probleme mit HTTP.Get
 
Zitat:

Zitat von ATS3788 (Beitrag 1387508)
Was meinst Du mit OpenSSL-DLLs?


https://indy.fulgan.com/SSL/

TiGü 29. Nov 2017 14:39

AW: Probleme mit HTTP.Get
 
Zitat:

Zitat von ATS3788 (Beitrag 1387508)
Was meinst Du mit OpenSSL-DLLs?
Ich habe alle Dlls von Chromium in das
Exe Folder kopiert.

ssleay32.dll und libssl32.dll!

Ohne die wird doch sofort eine entsprechende Meldung geworfen vom Indy-Framework, sobald du von einer https-Adresse ein Bild runterlädst.
Hast du die Fehlermeldung / Exception nicht gelesen?

ATS3788 29. Nov 2017 14:47

AW: Probleme mit HTTP.Get
 
Danke Super Danke LTES
ssleay32.dll habe ich häufig auf meinem System gefunden
bei
libssl32.dll
sieht es Mau aus.
Mann kann das runterladen habe aber Angst mir ein Super Virus einzufangen
Ihr seit toll:thumb:

ATS3788 29. Nov 2017 14:52

AW: Probleme mit HTTP.Get
 
Liste der Anhänge anzeigen (Anzahl: 1)
Da hast Du recht nur ich hätte auch mit dem Lesen der Message nicht gewußt was zu machen ist
Danke

LTE5 29. Nov 2017 14:55

AW: Probleme mit HTTP.Get
 
Ich gehe da immer so vor, dass ich vor Abschicken des Befehls eine Instanz von TIdSSLIOHandlerSocketOpenSSL erzeuge und mit Daten fülle (Host, Port, Destination, TLS-Modus).
Ob das notwendig ist weiß ich nicht. Ich machs einfach.

Oder reicht ein simples
Delphi-Quellcode:
 IOHndl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
 IOHandler := IOHndl;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr.
Seite 1 von 2  1 2      

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