Hilfe: SSL - wirklich einfaches Beispiel gesucht

    Hier hast du eine Klasse, die HTTPS-Seiten sowohl als Text als auch als Stream abholen kann : ( Mit Indy 10.6.2.5341 ). Du brauchst dann noch die Dll's libeay32.dll, msvcr120.dll und ssleay32.dll

    Delphi-Code

    1. IHttpsPage = Interface ( IUnknown )
    2. procedure GetTextData ( aURL : string; aText : TStrings);
    3. procedure GetBinaryData ( aURL : string; aData : TStream);
    4. end;
    5. { THTTPSPage }
    6. {-----------------------------------------------------------------------------
    7. Classname : THTTPSPage
    8. Autor : Guinnes
    9. Datum : 26.10.2015
    10. Aufgabe : |
    11. Properties:
    12. -----------------------------------------------------------------------------}
    13. THTTPSPage = class(TInterfacedObject, IHTTPSPage)
    14. private
    15. public
    16. constructor Create;
    17. destructor Destroy; override;
    18. // proceduren von IHTTPSPage
    19. procedure GetTextData ( aURL : string; aText : TStrings);
    20. procedure GetBinaryData ( aURL : string; aData : TStream);
    21. end;
    22. { THTTPSPage }
    23. constructor THTTPSPage.Create;
    24. begin
    25. inherited;
    26. end;
    27. destructor THTTPSPage.Destroy;
    28. begin
    29. inherited;
    30. end;
    31. procedure THTTPSPage.GetBinaryData(aURL: string; aData : TStream);
    32. var
    33. http : TIdHTTP;
    34. ssl : TIdSSLIOHandlerSocketOpenSSL;
    35. begin
    36. if aURL <> '' then
    37. begin
    38. http := TIdHTTP.Create( nil );
    39. try
    40. ssl := TIdSSLIOHandlerSocketOpenSSL.Create( http );
    41. http.Request.UserAgent := 'Mozilla/32.0';
    42. http.IOHandler := ssl;
    43. http.get(aURL,aData);
    44. finally
    45. http.Free;
    46. end;
    47. end;
    48. end;
    49. procedure THTTPSPage.GetTextData(aURL: string; aText: TStrings);
    50. var
    51. http: TIdHTTP;
    52. ssl : TIdSSLIOHandlerSocketOpenSSL;
    53. begin
    54. http := TIdHTTP.Create( nil );
    55. try
    56. ssl := TIdSSLIOHandlerSocketOpenSSL.Create( http );
    57. http.Request.UserAgent := 'Mozilla/32.0';
    58. http.IOHandler := ssl;
    59. http.HandleRedirects := True;
    60. Try
    61. // aText.Text := http.Get(aURL,IndyTextEncoding_OSDefault);
    62. aText.Text := http.Get(aURL);
    63. except
    64. aText.Text := '';
    65. end;
    66. finally
    67. http.Free;
    68. end;
    69. end;

    Glückauf

    Herr, wirf Hirn vom Himmel

    Ein Leben ohne Möpse ist möglich, aber sinnlos ( Loriot )
    Der beste Platz für Politiker ist das Wahlplakat. Dort ist er tragbar, geräuschlos und leicht zu entfernen ( Loriot )

    Es gibt Leute, die fühlen sich überall gedemütigt, wo sie nicht frech sein dürfen ( Otto Weiss )

    guinnes schrieb:

    Hier hast du eine Klasse, die HTTPS-Seiten sowohl als Text als auch als Stream abholen kann : ( Mit Indy 10.6.2.5341 ). Du brauchst dann noch die Dll's libeay32.dll, msvcr120.dll und ssleay32.dll ...


    Ganz herzlichen Dank, der Code hat sich sofort compilieren lassen.
    Aber ich bin leider noch nicht erfolgreich gewesen beim Laden zB. dieser Datei:
    swr3.de/export/podcast/SWR3-ko…d=603996/189auk/index.xml

    Versucht hab´s mit auch mit gefühlt 100 Ausgaben der *.DLLs - versucht hab ich´s auch mit INDY 9 (weil ich irgendwo las, damit sei jemand eher erfolgreich gewesen).

    Hättest Du - oder hätte jemand anderes - noch einen Tip für mich?

    Gruß Tomas

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tomasherrmann“ ()

    Mit der von mir angebenen Indy-Version tuts einwandfrei. Hier noch die Versionen der Dll's
    libeay32 : 1.0.2.4 vom 09.07.2015
    msvcr120 : 12.0.21005.1 vom 05.10.2013 02:38
    ssleay32 : 1.0.2.4 vom 09.07.2015
    Wie benutzt du die Klasse ? ( Quelltext )
    Glückauf

    Herr, wirf Hirn vom Himmel

    Ein Leben ohne Möpse ist möglich, aber sinnlos ( Loriot )
    Der beste Platz für Politiker ist das Wahlplakat. Dort ist er tragbar, geräuschlos und leicht zu entfernen ( Loriot )

    Es gibt Leute, die fühlen sich überall gedemütigt, wo sie nicht frech sein dürfen ( Otto Weiss )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „guinnes“ ()

    BESTEN DANK GUINNES!

    Die Versionen waren das Übel ! Ganz nachbauen konnte ich Deine Empfehlungen nicht (hab jetzt die DLLs 1.0.2k und Indy 10.5.) aber das passt zusammen und funktioniert! Sogar mehrfach wiederholbar.
    Mein Test-Programm spielt jetzt ja eigentlich keine Rolle mehr - es tut ja - aber ich häng´s vor lauter Freude mal an.

    Beste Grüße, Tomas

    Delphi-Code

    1. unit ssl_u1;
    2. interface
    3. uses
    4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    5. Dialogs,idhttp,IdSSLOpenSSL, StdCtrls;
    6. type
    7. TForm1 = class(TForm)
    8. Button1: TButton;
    9. Memo1: TMemo;
    10. procedure Button1Click(Sender: TObject);
    11. private
    12. { Private-Deklarationen }
    13. public
    14. { Public-Deklarationen }
    15. end;
    16. IHttpsPage = Interface ( IUnknown )
    17. procedure GetTextData ( aURL : string; aText : TStrings);
    18. procedure GetBinaryData ( aURL : string; aData : TStream);
    19. end;
    20. { THTTPSPage }
    21. {-----------------------------------------------------------------------------
    22. Classname : THTTPSPage
    23. Autor : Guinnes
    24. Datum : 26.10.2015
    25. Aufgabe : |
    26. Properties:
    27. -----------------------------------------------------------------------------}
    28. THTTPSPage = class(TInterfacedObject, IHTTPSPage)
    29. private
    30. public
    31. constructor Create;
    32. destructor Destroy; override;
    33. // proceduren von IHTTPSPage
    34. procedure GetTextData ( aURL : string; aText : TStrings);
    35. procedure GetBinaryData ( aURL : string; aData : TStream);
    36. end;
    37. { THTTPSPage }
    38. var
    39. Form1: TForm1;
    40. implementation
    41. {$R *.dfm}
    42. constructor THTTPSPage.Create;
    43. begin
    44. inherited;
    45. end;
    46. destructor THTTPSPage.Destroy;
    47. begin
    48. inherited;
    49. end;
    50. procedure THTTPSPage.GetTextData(aURL: string; aText: TStrings);
    51. var
    52. http: TIdHTTP;
    53. ssl : TIdSSLIOHandlerSocketOpenSSL;
    54. // ssl : TIdSSLIOHandlerSocket;
    55. begin
    56. http := TIdHTTP.Create( nil );
    57. try
    58. ssl := TIdSSLIOHandlerSocketopenssl.Create( http );
    59. http.Request.UserAgent := 'Mozilla/32.0';
    60. http.IOHandler := ssl;
    61. http.HandleRedirects := True;
    62. Try
    63. // aText.Text := http.Get(aURL,IndyTextEncoding_OSDefault);
    64. aText.Text := http.Get(aURL);
    65. except
    66. aText.Text := '';
    67. end;
    68. finally
    69. http.Free;
    70. end;
    71. end;
    72. procedure THTTPSPage.GetBinaryData(aURL: string; aData : TStream);
    73. var
    74. http : TIdHTTP;
    75. ssl : TIdSSLIOHandlerSocketopenssl;
    76. begin
    77. if aURL <> '' then
    78. begin
    79. http := TIdHTTP.Create( nil );
    80. try
    81. ssl := TIdSSLIOHandlerSocketopenssl.Create( http );
    82. http.Request.UserAgent := 'Mozilla/32.0';
    83. http.IOHandler := ssl;
    84. http.get(aURL,aData);
    85. finally
    86. http.Free;
    87. end;
    88. end;
    89. end;
    90. procedure TForm1.Button1Click(Sender: TObject);
    91. var hp : thttpspage;
    92. ts : tmemorystream;
    93. begin
    94. hp:= thttpspage.Create;
    95. ts:= tmemorystream.Create;
    96. hp.GettextData('https://www.swr3.de/export/podcast/SWR3-komplett/-/id=279178/did=603996/189auk/index.xml',memo1.Lines);
    97. memo1.lines.SaveToFile('hugo.txt');
    98. end;
    99. end.
    Du produzierst dir jede Menge Speicherlöcher :

    Delphi-Code

    1. procedure TForm1.Button1Click(Sender: TObject);
    2. var hp : thttpspage; // Nimm hier nicht ThttpsPage sondern IHTTPSPage
    3. ts : tmemorystream; // Wird nicht benutzt, also überflüssig
    4. begin
    5. hp:= thttpspage.Create;
    6. ts:= tmemorystream.Create;// Siehe Oben
    7. hp.GettextData('https://www.swr3.de/export/podcast/SWR3-komplett/-/id=279178/did=603996/189auk/index.xml',memo1.Lines);
    8. memo1.lines.SaveToFile('hugo.txt');
    9. end;
    Glückauf

    Herr, wirf Hirn vom Himmel

    Ein Leben ohne Möpse ist möglich, aber sinnlos ( Loriot )
    Der beste Platz für Politiker ist das Wahlplakat. Dort ist er tragbar, geräuschlos und leicht zu entfernen ( Loriot )

    Es gibt Leute, die fühlen sich überall gedemütigt, wo sie nicht frech sein dürfen ( Otto Weiss )