2012-05-30 10 views
14

यह फिर से this question के लिए समय है, लेकिन डेल्फी XE2 साथ इस बार।मैं कैसे डेल्फी XE2 SSL पर गूगल कैलेंडर एपीआई से बात करने के लिए मिल सकता है?

मैं इंडी संस्करण 10.5.8.0 का उपयोग कर रहा हूं कि एक्सई 2 के साथ जहाजों, और मैंने एसएसएल डीएलएस के चार अलग-अलग संस्करणों की कोशिश की है। मैं 1.0.x नवीनतम की कोशिश की है, और के बारे में 3 अलग 0.9.8 संस्करण (ई, एच, एक्स, ....)।

कैलेंडर.google.com पर https: // urls से संचार करते समय उनमें से कोई भी काम नहीं करता है। "Sync-components.com" पर डेल्फी Google कैलेंडर घटक के लेखक अपने स्वयं के द्विआधारी ओपनएसएल डीएलएल रनटाइम भेजते हैं जिनके पास कोई संस्करण जानकारी नहीं है, लेकिन यह 0.9.8 से पुराना SSL libs का एक बहुत छोटा, पुराना संस्करण प्रतीत होता है। घटक के लेखक का कहना है कि केवल उनके निजी विचलित डीएलएल काम करने के लिए जाने जाते हैं। मैं उस पर विश्वास नहीं कर सकता। निश्चित रूप से openssl DLLs का कम से कम एक संस्करण में अच्छी तरह से डेल्फी XE2 साथ काफी काम करता है गूगल कैलेंडर के लिए कनेक्ट करने के लिए।

आदेश में डेल्फी XE2 में इंडी 10 में लोड करने के लिए अपने कस्टम प्राचीन DLL प्राप्त करने के लिए, वह IdSSLOpenHeaders.pas विधि लोड संशोधित करता है, इस तरह, अंत में:

function Load: Boolean; 
begin 
    /// ... lots of stuff 
    //Result := (FFailedFunctionLoadList.Count = 0); // original. 
    Result := (FFailedFunctionLoadList.Count <= 18); // changed to. 
end; 
बेशक

, घटक है कि मैं का मूल्यांकन XE2 में काम नहीं करता हूँ, लेकिन मुझे लगता है यह या तो (क) इंडी 10 के इस विशेष स्नैपशॉट की brokenness XE2, या (ख) इस तथ्य के साथ जहाजों एसएसएल DLLs की दुनिया के लिए "टूटे की एक सत्य नरक है कि वह आप लेकिन मेरे लिए काम करता है "विभिन्न संस्करण।

डेल्फी XE2 में इंडी (या SSL समर्थन के साथ कोई अन्य डेल्फी घटक लाइब्रेरी) का उपयोग करके Google कैलेंडर में SSL कनेक्शन प्राप्त करने के लिए मुझे क्या करना है?

वैकल्पिक रूप से, अगर किसी के पास Google कैलेंडर API कार्यान्वयन है जो इंडी के अलावा किसी अन्य चीज़ के साथ काम करता है जिसे मैं परीक्षण के लिए उपयोग कर सकता हूं, तो मैं लिंक और पॉइंटर्स की सराहना करता हूं।

+1

आप एक बजट है, तो [SecureBlackBox] पर एक नज़र डालें (http://www.eldos.com/)। उनके पास एक पूर्ण कार्यात्मक परीक्षण संस्करण है। –

+0

वे सामान्य https समर्थन नहीं बल्कि यहां तक ​​कि गूगल कैलेंडर एपीआई जो मुझे आश्चर्य है कि अगर गूगल कैलेंडर के HTTPS प्रमाणन विकल्प या कुछ और के साथ कुछ अजीब बातें हैं बनाता का एक डेमो प्रदान क्योंकि मैं किस बारे में पूछ रहा हूँ कि: सिर्फ एसएसएल, लेकिन Google सर्वर ssl। –

उत्तर

6

इंडी 10 के स्नैपशॉट में कुछ गड़बड़ है जो एक्सई 2 के साथ जहाजों में है, जिसमें आईडीएचटीटीपी ऑब्जेक्ट मुझे दिखाई देने वाले ओपनएसएसएल डीएलएस के साथ अच्छी तरह से काम नहीं करता है, जिसमें मैं किसी भी Google कैलेंडर सर्वर सेवाओं के साथ संवाद नहीं कर सका उन्हें।

समस्या की वास्तविक अंतर्निहित प्रकृति यह प्रतीत होती है कि इंडी HTTP रीडायरेक्ट को पारदर्शी रूप से संभाल नहीं पाता है जैसा कि हमने आशा की थी। इंडी (थर्ड पार्टी घटक) में हेरफेर करने वाला कोड इंडी "http रीडायरेक्ट" हैंडलिंग तर्क के साथ चीजों को समझना वाकई मुश्किल है जो कामकाज का एक सेट प्रतीत होता है, जो काम नहीं करता है। भ्रमित करने वाला और क्या है, यह है कि कोड में सटीक स्थान जहां HTTP रीडायरेक्ट होते हैं, Google कैलेंडर का परीक्षण करने वाले व्यक्ति से भिन्न होता है, इसलिए इन रीडायरेक्ट ग्लिच हमेशा प्रत्येक व्यक्ति के परीक्षण के लिए उसी स्थान पर दिखाई नहीं देते हैं।

ध्यान दें कि लॉगिन विधि, और कैलेंडर प्राप्त करने के तरीके को काम किया। लेकिन घटनाओं को पढ़ने के लिए विधियों और कोड, काम नहीं कर रहे हैं। मैं दोनों के बीच अंतर यह पता लगाने में असमर्थ था, लेकिन कोड मैं उपयोग कर रहा हूँ वाणिज्यिक है और मैं इसे के किसी भी पोस्ट नहीं कर सकते। मैं इस संदेश को अद्यतन करेगा अगर मैं कभी वास्तविक तकनीकी कारण यह है कि HTTP प्राप्त अनुरोध इस तरह यूआरएल के लिए अपने जवाब में "0 बाइट्स" लौट रहा था यह पता लगाने:

https://www.google.com/calendar/feeds/firstname.lastname%40gmail.com/private/full?max-results=100000 

उन शून्य बाइट परिणाम थे वास्तव में HTTP 302 अनुप्रेषित प्रतिक्रिया कोड, जो कोड मैं उपयोग कर रहा था, ने जांच या उम्मीद नहीं की थी। यह इंडी को रीडायरेक्ट को स्वचालित रूप से संभालने की उम्मीद कर रहा था।

समस्या यह भी हो सकती है कि इंडी 10 संस्करण बहुत विशिष्ट है और केवल ओपनएसएसएल डीएल के संस्करण के साथ काम करता है जो मुझे आज मेरी खोज में नहीं मिला, या इंडी 10 संस्करण जो XE2 के साथ जहाज़ काम नहीं करता है ओपनएसएसएल डीएलएस के किसी भी संस्करण के साथ जो मुझे मिल सकता है, कम से कम नहीं जब वह जिस लक्ष्य से बात कर रहा है वह Google के HTTPS कैलेंडर सर्वर है।

कोड मैं चला रहा हूँ एक TIdSSLIOHandlerSocketOpenSSL के साथ एक IdHTTP वस्तु बनाता है।

यह करने के लिए और XE सहित डेल्फी के सभी संस्करणों में काम करता है, लेकिन XE2 साथ इंडी संस्करण शिपिंग की वजह से एक कारखाने XE2 प्रणाली के साथ टूटता है,।

केवल ठीक मैं पाया है इंडी का एक नया रात का निर्माण स्थापित करने के लिए है, मैं 4760 पकड़ा, ठीक काम करने के लिए प्रकट होता है जो जब OpenSSL dll संस्करण 1.0.1 के साथ संयुक्त।

यह डेल्फी XE2 साथ OpenSSL का उपयोग कर की तरह मुझे लग रहा है एक सा बॉक्स से बाहर मुश्किल है। इतनी मेहनत के लिए इंडी टीम के लिए आपका बहुत बड़ा धन्यवाद .... लेकिन क्या कोई उनकी मदद कर सकता है? यह वास्तव में एक महान परियोजना है और एक अच्छा उत्पाद है, लेकिन जब यह टूट जाता है, और जब आपको एक चलती मानक (ओपनएसएसएल कार्यान्वयन की तरह) का पालन करना होता है, तो शायद थोड़ा और दस्तावेज, और परीक्षण, और आंखों की मदद मिलेगी। मैं सहायता करने के लिए तैयार हूं अगर कोई मुझे दिखा सकता है कि मैं कैसे मदद कर सकता हूं। एसएसएल के साथ समस्याएं इंडी-विशिष्ट नहीं हैं, क्योंकि मुझे लगता है कि अन्य घटक विक्रेताओं और ओपन सोर्स लोगों के पास ओपनएसएसएल डीएल के विशिष्ट संस्करण हैं जो वे समर्थन करते हैं या समर्थन नहीं करते हैं।

एक और दुखद चीजें जो मैंने आज सीखी: ओपनएसएसएल के कुछ इंस्टॉलर आपके विंडोज़ सिस्टम 32 निर्देशिका में डिफ़ॉल्ट रूप से (चेतावनी के बिना) अपने डीएलएल इंस्टॉल करते हैं, न केवल आपके ऐप को, बल्कि अन्य, जैसे टोर्टोइज एचजी और टोर्टोइज एसवीएन, तोड़ने के लिए। यदि आप चारों ओर खेलना शुरू करने से पहले एसएसएल के साथ बड़ी समस्या नहीं रखते हैं, तो आप आसानी से इसे खराब कर सकते हैं यदि आप OpenSSL website से इंस्टॉलर-संस्करणों का एक समूह स्थापित करते हैं।

+2

स्थापना समस्याओं से बचने के लिए मेरे पास हमेशा हमेशा निर्देशिका निर्देशिका में आवश्यक डीएलएस हैं। यदि तृतीय पक्ष एपीआई का संस्करण आपकी प्रोजेक्ट के लिए विशिष्ट है, तो हमेशा फाइलें स्थानीय रूप से सुलभ होती हैं। – Misha

+0

अच्छा बिंदु मिशा। मैं इसे देव और तैनाती के दौरान ऐसा करने की योजना बना रहा हूं। –

+1

@WarrenP - तो, ​​संक्षेप में, आपकी सिफारिश क्या है? निजी तौर पर, मैं कभी इंडी के शिपिंग संस्करण का उपयोग नहीं करता लेकिन इसके बजाय एसवीएन संस्करण का उपयोग करता हूं। यह निश्चित रूप से कोई मुफ्त लंच नहीं है, लेकिन मुझे पता चला है कि मैं भेजे गए संस्करणों की कमियों को मारने के बजाय सबकुछ (इंडी और किसी तीसरे पक्ष के घटक जो इसका उपयोग करता है) को फिर से संकलित करना पसंद करता हूं (किसी कारण से हमेशा कुछ समस्या होती है) –

संबंधित मुद्दे