[Geloest] Synapse HTTPS GET mit Memory Leak?

Alle Fragen zur Netzwerkkommunikation

[Geloest] Synapse HTTPS GET mit Memory Leak?

Beitragvon Eclipticon » 2. Mai 2015, 21:50 [Geloest] Synapse HTTPS GET mit Memory Leak?

Hi,

ich lade mit folgendem Code eine Seite ueber HTTPS herunter und verwende dafuer Synapse und die OpenSSL Libraries Version 0.9.8d oder 1.0.2, beides auf Win32:

Code: Alles auswählen
function HttpsGetText(const URL: string; const Response: TStrings): boolean;
var
  HTTPSend: THTTPSend;
begin
  HTTPSend := THTTPSend.Create;
  try
    HTTPSend.Sock.CreateWithSSL(TSSLOpenSSL);
    HTTPSend.Sock.SSLDoConnect;
    Result := HTTPSend.HTTPMethod('GET', URL);
    if Result then
      Response.LoadFromStream(HTTPSend.Document);
  finally
    HTTPSend.Free;
  end;
end;
 
procedure TForm1.TestHttpsButtonClick(...);
var
  MyStrings: TStringList;
begin
  try
    MyStrings := TStringList.Create;
    if HttpsGetText('https://www.google.com/', MyStrings) then
      ShowMessage(MyStrings.CommaText);
  finally
    FreeAndNil(MyStrings)
  end;
end;


Das funktioniert auch, allerdings meldet heaptrc ein memory leak, sobald ich diesen Code ausfuehre:

scs.png


Was mache ich hier falsch?

Danke und schoenen Abend!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Eclipticon am 2. Mai 2015, 22:22, insgesamt 1-mal geändert.
Eclipticon
 
Beiträge: 292
Registriert: 5. Feb 2011, 20:38
Wohnort: Wien
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Michl » 2. Mai 2015, 22:09 Re: Synapse HTTPS GET mit Memory Leak?

Versuchs mal so:
Code: Alles auswählen
uses ...,httpsend, ssl_openssl;  //<- mit der Einbindung von ssl_openssl sollte der Job eigentlich gemacht werden
...
function HttpsGetText(const URL: string; const Response: TStrings): boolean;
var
  HTTPSend: THTTPSend;
begin
  HTTPSend := THTTPSend.Create;
  try
//    HTTPSend.Sock.CreateWithSSL(TSSLOpenSSL);
//    HTTPSend.Sock.SSLDoConnect;
    Result := HTTPSend.HTTPMethod('GET', URL);
    if Result then
      Response.LoadFromStream(HTTPSend.Document);
  finally
    HTTPSend.Free;
  end;
end;
 
procedure TForm1.TestHttpsButtonClick(...);
var
  MyStrings: TStringList;
begin
  try
    MyStrings := TStringList.Create;
    if HttpsGetText('https://www.google.com/', MyStrings) then
      ShowMessage(MyStrings.CommaText);
  finally
    FreeAndNil(MyStrings)
  end;
end;
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2241
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon theo » 2. Mai 2015, 22:12 Re: Synapse HTTPS GET mit Memory Leak?

Du machst zu viel. Eine ssl_X Unit in die Uses aufnehmen reicht.

Code: Alles auswählen
uses ...  ssl_openssl,  httpsend;      
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   HttpGetText('https://www.google.com/',Memo1.lines);
end;   


EDIT: Michl war schneller. Ist ja auch schon spät... :wink:
theo
 
Beiträge: 8033
Registriert: 11. Sep 2006, 18:01

Beitragvon Eclipticon » 2. Mai 2015, 22:22 [geloest] Synapse HTTPS GET mit Memory Leak?

Doppelt haelt besser, danke Euch beiden!

Und ich koennte schwoeren, dass es so urspruenglich nicht funktioniert hat, aber jetzt tut's ... :shock:
Eclipticon
 
Beiträge: 292
Registriert: 5. Feb 2011, 20:38
Wohnort: Wien
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon theo » 2. Mai 2015, 22:27 Re: [Geloest] Synapse HTTPS GET mit Memory Leak?

Pro Memoria: Habe es eben noch auf OpenSuse getestet:
Man muss openssl-devel (RPM) installiert haben, sonst geht es sang und klanglos nicht.
theo
 
Beiträge: 8033
Registriert: 11. Sep 2006, 18:01

Beitragvon mark332 » 3. Mai 2015, 21:36 Re: [geloest] Synapse HTTPS GET mit Memory Leak?

Eclipticon hat geschrieben:Doppelt haelt besser, danke Euch beiden!

Und ich koennte schwoeren, dass es so urspruenglich nicht funktioniert hat, aber jetzt tut's ... :shock:


Du musst auf der entsprechenden Machine natürlich die Bibliotheken der SSL-Unit, die du verwendest installiert haben ;)
bei "uses ssl_openssl" natürlich OpenSSL

MfG
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?
mark332
 
Beiträge: 202
Registriert: 16. Mai 2013, 12:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X | 
CPU-Target: AMD Octacore 4.0GHz
Nach oben

Beitragvon corpsman » 17. Feb 2016, 17:20 Re: [Geloest] Synapse HTTPS GET mit Memory Leak?

Servus, habe hier diesen alten Thread gefunden, evtl könnt ihr mir helfen, versuche via Synapse eine Datei von einem https Server zu laden.

Code: Alles auswählen
 
 
Uses LazFileUtils, LazUTF8, ssl_openssl, HTTPSend;
 
Procedure DownLoadFile(URL, Filename: String);
Var
  f: TFileStream;
Begin
  With THTTPSend.Create Do Begin
    writeln(url);
    If HTTPMethod('GET', URL) Then Begin
      Try
        f := TFileStream.Create(Filename, fmOpenWrite Or fmCreate);
        f.CopyFrom(Document, Document.Size);
        f.Free;
      Except
      End;
    End;
    Free;
  End;
End;   
 


corpsman@corpsman2:~$ sudo aptitude install openssl
[sudo] password for corpsman:
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.

corpsman@corpsman2:~$



Aufruf via :

Code: Alles auswählen
 
    DownLoadFile('https://d1u1p2xjjiahg3.cloudfront.net/e1d31c7c-5b8b-4294-923a-decc10206e72_l.jpg', '/tmp/test.jpg');
 


So wie es aussieht, klappt es nicht weil er in httpsend.pas "Fsock.lastError" <> 0 ist

Code: Alles auswählen
function THTTPSend.InternalDoConnect(needssl: Boolean): Boolean;
begin
  Result := False;
  FSock.CloseSocket;
  FSock.Bind(FIPInterface, cAnyPort);
  if FSock.LastError <> 0 then
    Exit;
  FSock.Connect(FTargetHost, FTargetPort);
  if FSock.LastError <> 0 then
    Exit;
  if needssl then
  begin
    if (FSock.SSL.SNIHost='') then
      FSock.SSL.SNIHost:=FTargetHost;
    FSock.SSLDoConnect;
    FSock.SSL.SNIHost:=''; //don't need it anymore and don't wan't to reuse it in next connection
    if FSock.LastError <> 0 then
      Exit;
  end;
  FAliveHost := FTargetHost;
  FAlivePort := FTargetPort;
  Result := True;
end


Jemand noch ne Idee, was ich anders machen kann ?, Tippe ich die File URL im Browser ein ist das Bild natürlich zu sehen..
--
Just try it
corpsman
 
Beiträge: 1037
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Kubuntu 14.04, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 32Bit
Nach oben

Beitragvon mark332 » 17. Feb 2016, 17:24 Re: [Geloest] Synapse HTTPS GET mit Memory Leak?

Hey corpsman,

eine direkte Antwort auf dein Problem habe ich nicht, aber ich wollte einmal anregen, dass du statt dem FileStream auch einfach "HTTP.Document.SaveToFile" verwenden kannst

MfG

mark332
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?
mark332
 
Beiträge: 202
Registriert: 16. Mai 2013, 12:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X | 
CPU-Target: AMD Octacore 4.0GHz
Nach oben

Beitragvon theo » 17. Feb 2016, 17:25 Re: [Geloest] Synapse HTTPS GET mit Memory Leak?

Sind die OpenSSL Libs installiert/im Pfad?
Hast du die richtigen? http://synapse.ararat.cz/files/crypt/
theo
 
Beiträge: 8033
Registriert: 11. Sep 2006, 18:01

Beitragvon corpsman » 17. Feb 2016, 17:30 Re: [Geloest] Synapse HTTPS GET mit Memory Leak?

Das Linux Packet OpenSSL ist installiert, falls du das meinst.

Wenn ich die Cryptlib.pas die du verlinkt hast mit in mein Projekt einbinde, dann kompiliert es nicht mehr..
--
Just try it
corpsman
 
Beiträge: 1037
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Kubuntu 14.04, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 32Bit
Nach oben

Beitragvon theo » 17. Feb 2016, 17:36 Re: [Geloest] Synapse HTTPS GET mit Memory Leak?

Nee, der Link war für Windows.

Hast du wie oben erwähnt auch openssl-devel installiert?
theo
 
Beiträge: 8033
Registriert: 11. Sep 2006, 18:01

Beitragvon corpsman » 17. Feb 2016, 17:39 Re: [Geloest] Synapse HTTPS GET mit Memory Leak?

hmm das scheint es auf meinem system nicht zu geben

corpsman@corpsman2:~$ uname -a
Linux corpsman2 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:37:48 UTC 2015 i686 i686 i686 GNU/Linux


corpsman@corpsman2:~$ sudo aptitude install openss
openssh-blacklist openssh-sftp-server openssn
openssh-blacklist-extra openssl openssn-data
openssh-client openssl-blacklist openssn-dbg
openssh-server openssl-blacklist-extra
--
Just try it
corpsman
 
Beiträge: 1037
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Kubuntu 14.04, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 32Bit
Nach oben

Beitragvon theo » 17. Feb 2016, 17:47 Re: [Geloest] Synapse HTTPS GET mit Memory Leak?

Habe es eben getestet, bei mir geht der Code (OpenSuse) Das Jpeg kommt rein.

"devel" macht meistens Symlinks

Hast du /usr/lib64/libssl.so? Oder halt in /usr/lib ?
Evtl. auch /usr/lib64/libcrypto.so
theo
 
Beiträge: 8033
Registriert: 11. Sep 2006, 18:01

Beitragvon corpsman » 17. Feb 2016, 18:00 Re: [Geloest] Synapse HTTPS GET mit Memory Leak?

lol,
habe es gerade auf meinem Odroid U3 probiert, dort lädt er die Files wunderbar, nur kann ich sie aufgrund des GTK2 Bugs nicht anzeigen ;)

Damit sit klar das mein Source stimmt, nu muss ich nur noch rauskriegen welche lib auf meinem anderen System fehlt.

Danke für die Hinweise..

[Edit]
So habe das paket gefunden :

sudo aptitude install libssl-dev


Falls jemand anderes den Thread findet ;)
--
Just try it
corpsman
 
Beiträge: 1037
Registriert: 28. Feb 2009, 08:54
Wohnort: Stuttgart
OS, Lazarus, FPC: Kubuntu 14.04, Lazarus SVN Trunk, FPC 3.0 | 
CPU-Target: 32Bit
Nach oben

• Themenende •

Zurück zu Netzwerk



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried