Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[FMX] Android - Indy ile HTTPS linklerine erişirken OpenSSL kütüphanesi kullanımı
#1
Lightbulb 
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.

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;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#2
(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
Cevapla
#3
@gbg katkı için teşekkürler ama yanlış ifade ettiğim yeri anlayamadım.

Metinde aynen öyle demiyor mu?
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#4
(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
Cevapla
#5
Ş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.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#6
Hocam merhaba bilgilendirme için teşekkürler lakin indirme linkinde zip dosyaları yok sadece klasörler var
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android’de Dosya Depolama ve Paylaşma emozgun 3 1.253 01-10-2020, Saat: 17:12
Son Yorum: mcuyan
  Enumerated Type'lar için Record Helper Kullanımı uparlayan 4 1.694 21-06-2020, Saat: 15:14
Son Yorum: uparlayan
Photo Generics (soysallar) ve TCustomAttribute kullanımı ve RTTI mustafaozpinar 15 7.112 07-10-2019, Saat: 14:15
Son Yorum: mustafaozpinar
  Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo vb.) csunguray 15 9.469 26-06-2019, Saat: 13:59
Son Yorum: csunguray
Lightbulb [GÜNCEL] Firebase GCM Android Bilgi Mesajı (Notification Push Message) mrmarman 20 16.172 11-12-2018, Saat: 14:50
Son Yorum: Bay_Y



Konuyu Okuyanlar: 1 Ziyaretçi