Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   THTTPClient unter Windows geht nicht richtig (https://www.delphipraxis.net/206745-thttpclient-unter-windows-geht-nicht-richtig.html)

Peter666 25. Jan 2021 15:11

THTTPClient unter Windows geht nicht richtig
 
Hi, ich habe folgendes Problem:

Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
var
  http: THttpClient;
  stream: TMemoryStream;
begin

  stream := TMemoryStream.Create;
  http := THttpClient.Create;
  http.HandleRedirects := true;
  try
    try
      http.Get('https://cdn.wallpapersafari.com/81/79/vl5G7p.jpg', stream);
      stream.Position := 0;
    except
    end;
  finally
    http.DisPoseOf;
  end;
  Image1.Bitmap.LoadFromStream(stream);
  stream.free;
end;
Der oben stehende Code sollte ein Bild in eine Bitmap laden. Irgendwie verweigert aber die Klasse unter Windows bei dem Code die Arbeit. Unter OSX, Android und iOS geht das aber problemlos. Ich mag aber nicht auf Indy umstellen, sondern lieber den Nativen Code von Embarcadero nutzen. Soweit ich mich erinnere ging das aber unter 10.3 ohne Murren und Knurren.

Peter

Der schöne Günther 25. Jan 2021 15:29

AW: THTTPClient unter Windows geht nicht richtig
 
Magst du noch angeben was für dich "Arbeit verweigern" heißt? Wenn du die Exception nicht einfach schluckst und/oder im Debugger schaust, dann wüssten wir auch was denn genau nicht läuft wie es sollte...

Peter666 25. Jan 2021 15:45

AW: THTTPClient unter Windows geht nicht richtig
 
Ja klar, es kommt zu einem 12002 als Fehlermeldung nachdem der Timeout erreicht ist.

Der schöne Günther 25. Jan 2021 16:08

AW: THTTPClient unter Windows geht nicht richtig
 
Der nachfolgende Code lädt bei mir unter 10.0 Seattle und 10.4.0 Sydney problemlos die 139 KB große Sonnenblumenwiese herunter, unter Windows 32 und 64 Bit.
Irgendwelche spannenden Proxies auf deinem System? Und welche Delphi-Version genau?

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
   System.SysUtils,
   System.Classes,
   System.Net.HttpClient;

procedure p();
const
   url = 'https://cdn.wallpapersafari.com/81/79/vl5G7p.jpg';
   filePath = 'c:\users\localUser\Desktop\picture.jpg';
var
   http: THttpClient;
   stream: TMemoryStream;
begin
   stream := TMemoryStream.Create();
   try
      http := THTTPClient.Create();
      try
         http.HandleRedirects := True;
         http.Get(url, stream);
         stream.Seek(0, TSeekOrigin.soBeginning);
         stream.SaveToFile(filePath);
      finally
         http.Destroy();
      end;
   finally
      stream.Destroy();
   end;

end;

end.

t2000 25. Jan 2021 16:43

AW: THTTPClient unter Windows geht nicht richtig
 
Wie ist das mit dem "https"
Wir haben dazu einfach eine Indy TIdHttp mit passender TIdServerIOHandlerSSLOpenSSL Komponente genommen.

Alternativ: Direkt mit Windows Funktion Download

URLDownloadToFile(nil,PChar(MeineURLzumDownload),P Char(DerLokaleDateiname),0,nil)

jaenicke 25. Jan 2021 19:07

AW: THTTPClient unter Windows geht nicht richtig
 
Delphi-Quellcode:
Image1.Bitmap.LoadFromStream(stream);
Dort dürfte eher das Problem liegen.
Um welches Betriebssystem geht es denn? Die meisten, die das hier testen, verwenden vermutlich Windows 10, so auch ich. Dort ist das Laden mit den in Windows integrierten Codecs auch kein Problem. Bei älteren Betriebssystemen muss das nicht unbedingt funktionieren.

Was passiert denn, wenn du dir das im Debugger schrittweise anschaust?
Ist Stream.Size z.B. nach dem Laden korrekt?
Gibt es eine Exception?

Der schöne Günther 25. Jan 2021 19:15

AW: THTTPClient unter Windows geht nicht richtig
 
Zitat:

Zitat von Peter666 (Beitrag 1481530)
Ja klar, es kommt zu einem 12002 als Fehlermeldung nachdem der Timeout erreicht ist.

Aber das hat er sich doch wahrscheinlich nicht ausgedacht, oder?

jaenicke 25. Jan 2021 19:19

AW: THTTPClient unter Windows geht nicht richtig
 
Liste der Anhänge anzeigen (Anzahl: 1)
Stimmt, das hatte ich wieder vergessen nachdem ich es getestet hatte. :oops:

Hier geht es jedenfalls auch mit dem Originalcode 1:1.

// EDIT:
Hilft vielleicht der Process Monitor weiter? Bei mir sieht man dort das:
Anhang 53568
Gibt es dort auch ein TCP Receive?

Peter666 26. Jan 2021 12:53

AW: THTTPClient unter Windows geht nicht richtig
 
Vielen Dank für die Antwort. Das Problem lag wohl an meiner Firewall, bzw. der von Windows. Ich hab diese testweise ausgestellt und danach ging das ganze. Was mich wundert ist, dass ich den selben Code zum Lesen von XML und JSONs von einem Server verwende und das ging komischerweise. Bilder hat er aber geblockt.

Peter


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 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