Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Could Not Load SSL Library
#1
Indy bileşenlerini sık sık kullananların eninde sonunda karşılaştığı hata mesajı: Could Not Load SSL Library


Indy bileşenleri ile http ile başlayan web sitelerine istek gönderirken sıkıntı yok:
var
  IdHTTP: TIdHTTP;
  cevap: String;
begin
  IdHTTP := TIdHTTP.Create(nil);
  try
    cevap := IdHTTP.Get('http:// ile başlayan URL :-)' );
    // ...
  finally
    IdHTTP.Free;
  end;

Ama web adresi https ile başlayınca (işin içine security girince) işler biraz karışıyor Smile 

Bu durumda TIdSSLIOHandlerSocketOpenSSL sınıfından yardım alıyoruz:
var
  IdHTTP: TIdHTTP;
  cevap: String;
  IoHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  IdHTTP := TIdHTTP.Create(nil);
  IoHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  try
    // ... belki IoHandler ayarları değiştirilmesi gerekebilir.
    IdHTTP.IOhandler := IoHandler; 
    cevap := IdHTTP.Get('https://............' );
    // ...
  finally
    IdHTTP.Free;
    IoHandler.Free;
  end;

Tabii ki kodları bu şekilde değiştirmek yetmiyor! Ayrıca gerekli DLL'leri de projemizle birlikte kullanıcılara vermemiz gerekiyor. 

Indy bileşenleri (yukarıdaki koddan da anlaşılacağı üzere) SSL gereken bağlantılar için OpenSSL'i kullanıyor.

Aslında işler burada karışıyor: 
Bize gereken DLL'ler; kullandığımız Indy bileşenlerinin versiyonuna göre, hedef işletim sistemine göre(x86, x64) değişebiliyor. Hangi versiyonlar birbiri ile uyumlu buna dikkat etmek gerekiyor. Hatta FMX projesi yapıyorsanız hedef platforma özgü OpenSSL binary'lerinin kullanıcı tarafında olduğundan emin olmak durumundayız.
Sanırım bu durumdan hepimiz muzdaribiz Sad

Bunun çözümü çok basit: TNetHTTPClient kullanmak!  (Emin değilim ama XE8 versiyonu ile birlikte geldi sanırım)

TNetHTTPClient sınıfı OpenSSL kullanmaz. Yukarıda vurgulanan 'security' işini işletim sistemine bırakır. Yani işletim sistemi SSL için ne kullanıyorsa onu kullanır. Biz yazılımcılar da yukarıda bahsedilen sorunlarla uğraşmayız:

var
  NetHTTPClient: TNetHTTPClient;
  rsp: IHTTPResponse;
  cevap: String;
begin
  NetHTTPClient := TNetHTTPClient.Create(nil);
  try
    rsp := NetHTTPClient.Get('https://.....');
    cevap := rsp.ContentAsString();
  finally
    NetHTTPClient.Free;
  end;
There's no place like 127.0.0.1
WWW
Cevapla


Bu Konudaki Yorumlar
Could Not Load SSL Library - Yazar: SimaWB - 07-06-2018, Saat: 15:01
Cvp: Could Not Load SSL Library - Yazar: Fesih ARSLAN - 07-06-2018, Saat: 16:17
Cvp: Could Not Load SSL Library - Yazar: Jakarta2 - 09-05-2021, Saat: 19:47
Could Not Load SSL Library - Yazar: SimaWB - 07-06-2018, Saat: 17:26
Could Not Load SSL Library - Yazar: quiet1day - 08-06-2018, Saat: 00:37
Cvp: Could Not Load SSL Library - Yazar: meko - 08-06-2018, Saat: 09:10
Could Not Load SSL Library - Yazar: SimaWB - 08-06-2018, Saat: 11:57
Cvp: Could Not Load SSL Library - Yazar: meko - 08-06-2018, Saat: 13:26
Could Not Load SSL Library - Yazar: SimaWB - 08-06-2018, Saat: 13:50
Could Not Load SSL Library - Yazar: meko - 08-06-2018, Saat: 14:33
Could Not Load SSL Library - Yazar: sabanakman - 05-07-2018, Saat: 10:40
Could Not Load SSL Library - Yazar: ozanozan39 - 08-11-2019, Saat: 15:39
Cvp: Could Not Load SSL Library - Yazar: ss1907 - 17-03-2021, Saat: 17:52
Could Not Load SSL Library - Yazar: Jakarta2 - 09-05-2021, Saat: 17:34
Could Not Load SSL Library - Yazar: Delphici07 - 29-08-2021, Saat: 16:20
Could Not Load SSL Library - Yazar: mustafaozpinar - 04-07-2023, Saat: 19:43



Konuyu Okuyanlar: 1 Ziyaretçi