Delphi Can

Orjinalini görmek için tıklayınız: [FMX] Android - Indy ile HTTPS linklerine erişirken OpenSSL kütüphanesi kullanımı
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba.

- Windows'ta projenizin olduğu veya System Path içerisinde bir yere OpenSSL kütüphaneleri olan iki adet DLL dosyasını kopyalamak ile IdHttp ve TIdSSLIOHandlerSocketOpenSSL ikilisini sorunsuz kullanabiliyorduk. Bunu bir çoğumuz deneyimlemişizdir.

- Geçtiğimiz gün kurumda SSL erişimi için ANDROID projemde kullandığım HTTPS linklerine mobil platformdan erişirken lazım olduğunda kullandığım kütüphaneleri projemizde nasıl yapılandıracağımızı bir SSL erişim örneği ile özetleyeyim.

- Yine https://indy.fulgan.com/SSL/ linkinden başvurarak indireceğim Android destekli OpenSSL paketini indiriyoruz.

EKLEME: 64bit android platform için bu GitHub linkindeki kütüphaneleri kullanabilirsiniz.

a664sufkjy6mitsksyw3.png

Bu dosyayı bir klasöre açıyoruz içinde iki alt klasör göreceksiniz. 

tqdndhh2edmyugsisj2m.png


Bu alt klasörlerde ARM olanını açınca da 

gr6bj9wlqg1wfn79xskj.png

çıkan iki dosyayı projemiz ile deploy yani proje kurulumu yapılan mobil cihazın, projenize özel bir klasörüne koymasını sağlayacağız.

Bunun için PROJECT menüsünden alt kısımlar yakın olan DEPLOYMENT başlığını seçmeliyiz. 

r5zwcwv9z5ymlyvfyk9p.png

Burası çok önemli. Kırmızı ile daire içerisine aldığım Remote Path mutlaka .\assests\internal   (yazım hatasını düzeltiyorum  .\assets\internal ) şeklinde bize ait ulaşabileceğimiz bir klasör olsun ki aşağıda vereceğim örnekteki gibi TPath ile hazır erişim klasörlerinden erişebilelim.

hpg3fowcw9jt5ou9ex1j.png


Proje örneği... :idea:

Örnek Android projenizdeki forma bir TImageViewer yerleştirin ve aşağıdaki kodu yazın.
Buradaki kilit satır, SSL kütüphanenizin yerini bildiren şu satırdır.

   IdOpenSSLSetLibPath(TPath.GetDocumentsPath);


Uses Idhttp, IdSSLOpenSSL, IdSSLOpenSSLHeaders, System.IOUtils;

// Project / Deployment altında ".\assets\internal\" klasörü altına SSL .so dosyaları eklenir.
// IdOpenSSLSetLibPath(TPath.GetDocumentsPath) şeklinde bu klasör SSL path erişimine alınır
procedure TForm1.Button1Click(Sender: TObject);
Const
 CaptchaURL  = 'https://optik.sgk.gov.tr/Optik_Firma_Web/CaptchaServlet';
var
 IdHttp                : TIdHttp;
 IdSSLIOHandlerSocket  : TIdSSLIOHandlerSocketOpenSSL;
 MS                    : TMemoryStream;
 CaptchaImage          : TBitmap;
begin
 IdHttp               := TIdHttp.Create(nil);
 CaptchaImage         := TBitmap.Create; // Android'de PNG kabul ediyor...
 IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.create(nil);
 MS                   := TMemoryStream.Create;
 try
   IdOpenSSLSetLibPath(TPath.GetDocumentsPath);
   IdSSLIOHandlerSocket.PassThrough        := True;
   IdSSLIOHandlerSocket.SSLOptions.Method  := TIdSSLVersion.sslvTLSv1_2;

   IdHttp.IOHandler            := IdSSLIOHandlerSocket;
   IdHttp.Request.UserAgent    := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'; // 'Dalvik/2.1.0 (Linux; U; Android 8.0.0; SM-N950F Build/R16NW)';

   IdHttp.Get( CaptchaURL, MS );
   MS.Position := 0;
   CaptchaImage.LoadFromStream( MS );

// Web'den Captcha Image geldi..
   ImageViewer1.Bitmap := TBitmap.Create( Trunc(ImageViewer1.Width), Trunc(ImageViewer1.Height) );
   ImageViewer1.Bitmap.Assign( CaptchaImage ); // Görelim...
 finally
    CaptchaImage.Free;
    IdHttp.Free;
    IdSSLIOHandlerSocket.Free;
    MS.Free;
 end;
end;
(23-02-2019, Saat: 20:07)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]Burası çok önemli. Kırmızı ile daire içerisine aldığım Remote Path mutlaka .\assests\internal şeklinde bize ait ulaşabileceğimiz bir klasör olsun ki aşağıda vereceğim örnekteki gibi TPath ile hazır erişim klasörlerinden erişebilelim.
[/ars]

".\assets\internal" ayarlamanız gerekir
@gbg katkı için teşekkürler ama yanlış ifade ettiğim yeri anlayamadım.

Metinde aynen öyle demiyor mu?
(08-02-2021, Saat: 23:40)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]@gbg katkı için teşekkürler ama yanlış ifade ettiğim yeri anlayamadım.

Metinde aynen öyle demiyor mu?

".\assests\internal" yanlış , ".\assets\internal" doğru
İlginiz için teşekkür ederim
Şimdi anladım metni de üzerini çizerek sizin referansınız ile düzeltiyorum.
Hakkınız var Copy/Paste yapanlar olursa yanılmasınlar.
Hocam merhaba bilgilendirme için teşekkürler lakin indirme linkinde zip dosyaları yok sadece klasörler var
Örneğiniz üzerinden Android uygulamama bu işlemi yapabildim yalnız Ios tarafından IdOpenSSLSetLibPath fonksiyonunda hata alıyorum. Yardımcı olabilirmisiniz?
Teşekkürler elinize sağlık , her zamanki gibi yine muhteşem bir çalışma olmuş.