2011-07-13 11 views
11

मुझे बताएं कृपया एसएसएल (https: //) का उपयोग कर सर्वर से फ़ाइल डाउनलोड करने के लिए कैसे करें। मुझे इंटरनेट में उचित उत्तर नहीं मिला है।डेल्फी: idHttp + SSL

हर कोई TIdSSLIOHandlerSocket के बारे में कहता है, लेकिन मेरे पास केवल TIdSSLIOHandlerSocketOpenSSL है। यदि मैं TIdSSLIOHandlerSocketOpenSSL का उपयोग करता हूं तो मुझे एक त्रुटि 'एसएसएल लाइब्रेरी लोड नहीं कर सका' है। कुछ लोग कहते हैं कि इसे पुस्तकालय की आवश्यकता है, लेकिन सबसे अधिक इसके बारे में भी उल्लेख नहीं है। क्या मुझे यहां http://www.indyproject.org/sockets/SSL.EN.aspx से पुस्तकालयों का उपयोग करने की आवश्यकता है?

मेरे पास उन DLLs प्रोग्राम के फ़ोल्डर में हैं। के अनुसार: http://edn.embarcadero.com/article/31279 "रनटाइम पर, इंडी libeay32.dll और ssleay32.dll लोड करने का प्रयास करता है।" मुझे नहीं पता कि इंडी डीडीएल लोड करने का प्रयास करता है -> मुझे एक त्रुटि है: 'एसएसएल लाइब्रेरी लोड नहीं कर सका।'

procedure TForm1.FormCreate(Sender: TObject); 
    var UpdateMemoryStream:tmemorystream; 
    begin 
    try 
    UpdateMemoryStream:=TMemoryStream.Create; 
       try 
       idhttp2.Get('https://example.com/list.rar',UpdateMemoryStream); //I have: Exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.' 
       except 
        on E : Exception do 
        begin showmessage('Error: '+E.Message); 
        end; 
       end; 
    UpdateMemoryStream.SaveToFile('d:\1.rar'); 
    finally 
    UpdateMemoryStream.Free; 
    end; 
    end; 

मुझे यह त्रुटि क्यों है? मैं इंडी के OpenSSL वर्ग का उपयोग करने के डेल्फी 2010

+4

'TIdSSLIOHandlerSocket' इंडी 9 में कक्षा का नाम है।' TIdSSLIOHandlerSocketOpenSSL' इंडी 10 में नया वर्ग नाम है। –

उत्तर

7

है, तो आप ssleay32.dll और libeay32.dll की जरूरत है। संभवतः उस इंडी कोड में अपवाद के स्रोत से स्पष्ट होना चाहिए था जिसे आपने निष्पादित करने का प्रयास किया था।

पुस्तकालयों को प्रश्न में उल्लिखित इंडी पेज से जोड़ा जाता है। यदि आपको कानूनी रूप से ऐसा करने की अनुमति है, तो आप उन्हें अपने आवेदन के साथ वितरित कर सकते हैं। जहां भी डीएलएल जाते हैं उन्हें रखें (आमतौर पर आपकी एप्लिकेशन निर्देशिका)।

TIdSSLIOHandlerSocketOpenSSL अमूर्त TIdSSLIOHandlerSocket क्लास का ओपनएसएसएल-विशिष्ट वंशज है। यदि आप OpenSSL के बजाय कुछ अन्य SSL लाइब्रेरी का उपयोग कर रहे थे, तो आप एक अलग वंशज वर्ग का उपयोग करेंगे।

+0

यह महत्वपूर्ण नहीं है कि इसका उपयोग कैसे और कैसे किया जाए। मुझे केवल idHTTP + SSL का उपयोग करके फ़ाइल डाउनलोड करने की आवश्यकता है। क्या आप उपयोग करने का एक उदाहरण प्रदान कर सकते हैं? मेरे द्वारा इसकी सराहना की जाएगी। धन्यवाद। – maxfax

+0

@maxfax इन डीएलएल का उपयोग करके उठाया गया अपवाद "एसएसएल लाइब्रेरी लोड नहीं कर सका" हल किया गया है। –

+0

मेरे पास प्रोग्राम के फ़ोल्डर में है! उन्हें TIdSSLIOHandlerSocketOpenSSL से कैसे लिंक करें? – maxfax

6

डाउनलोड openssl-1.0.0d-i386- Win32 -rev2.zip, नहीं openssl-1.0.0d-x64_86- win64 -rev2.zip http://indy.fulgan.com/SSL/

से यहां पढ़ें भी: https://forums.embarcadero.com/thread.jspa?threadID=15569

+2

दाएं। आप 32-बिट प्रोग्राम लिख रहे हैं, इसलिए आपको 32-बिट डीएलएल की आवश्यकता है। –

+0

embarcadero लिंक काम नहीं कर रहा है –

0

मुझे एक ही समस्या थी, मैं 32-बिट मशीन पर संकलन डेल्फी 2010 का उपयोग करता हूं। जब मैं केवल HTTP यूआरएल को कॉल करने के लिए TIdHTTP का उपयोग कर रहा था, तो यह सब 32b और 64b दोनों पर ठीक काम करता था।

तब मैं HTTPS यूआरएल कॉल करने के लिए की जरूरत है, मैं सभी निर्देशों का पालन किया है, इस कोड

IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(nil); 
    IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1; 

जोड़ा और मैं exe फ़ोल्डर में 2 DLLs डाल

"रविवार, अप्रैल 10, 2011 1:21 प्रधानमंत्री 850,543 openssl-0.9.8r-i386-win32-rev2.zip "


अब यह 32b मशीन पर ठीक काम करता है लेकिन 64b मशीन पर मैं त्रुटि मिलती है" सॉकेट अं या # 10060. कनेक्शन का समय समाप्त हो गया। "कुछ सेकंड के बाद।

मैं 64 बिट DLLs की कोशिश की सिर्फ मामले में, वे त्रुटि उत्पन्न "एसएसएल पुस्तकालय लोड नहीं कर सका"

किसी को भी एक ही समस्या थी? क्या मुझे कुछ और कोड पोस्ट करना चाहिए?

--- संपादित करें --- 32 बिट मशीन Win7 चलाती है, 64 बिट मशीन Win8 चलाती है।

+0

हल किया गया, यह 64 बी समस्या नहीं थी, यह विन 8 समस्या थी। मैं यहाँ एक समाधान पाया http://stackoverflow.com/questions/14756882/indy10-openssl-send-email-code-stopped-working-on-windows-8 IdHTTP1.ReadTimeout: = 30000; – Milan

1

सही डीएलएल प्राप्त करना आवश्यक है क्योंकि कुछ एम $ स्टूडियो के लिंक के साथ संकलित हैं और इसलिए डेल्फी में काम नहीं करते हैं। https://indy.fulgan.com/SSL/ नवीनतम संस्करण पृष्ठ के निचले भाग पर आज़माएं।