2013-03-01 6 views
10

निम्नलिखित कोड के साथ मैं एक IPv4 वेबसाइट की सामग्री प्राप्त कर सकते हैं:IPv4 + IPv6 का समर्थन करने के लिए इंडी v10 को कॉन्फ़िगर कैसे करें?

uses 
    IdHttp; 

IdHttp1 := TIdHttp.Create(nil); 
try 
    Result := IdHttp1.Get('http://www.heise.de/') 
finally 
    IdHttp1.Free; 
end; 

लेकिन जब मैं एक IPv6 वेबसाइट से कनेक्ट करने की कोशिश मैं सॉकेट त्रुटि # 11004 मिलती है:

IdHttp1 := TIdHttp.Create(nil); 
try 
    Result := IdHttp1.Get('http://www.six.heise.de/') 
finally 
    IdHttp1.Free; 
end; 

मैं पिंग कर सकते हैं www.six.heise.de बस ठीक है (आईपी 2 ए 02: 2e0: 3fe: 100 :: 6 :) और फ़ायरफ़ॉक्स बिना किसी समस्या के वेबसाइट प्रदर्शित करता है।

आईपीवी 4 और आईपीवी 6 वेबसाइटों से कनेक्ट करने के लिए मुझे इंडी (एसवीएन से नवीनतम वी 10 बिल्ड) में बदलने की क्या ज़रूरत है?

उत्तर

11

TIdTCPClient को यह बताया जाना चाहिए कि आईपीवी 4 या आईपीवी 6 का उपयोग अपने सॉकेट और होस्टनाम-टू-आईपी संकल्पों के लिए करना है या नहीं। यह TIdTCPClient.IPVersion संपत्ति का उपयोग करके किया जाता है। हालांकि, TIdHTTP एक विशेष मामला है क्योंकि यहसहित आंतरिक रूप से TIdTCPClient गुणों और कनेक्शन का प्रबंधन करता है। TIdHTTP अनुरोध किए गए यूआरएल के आधार पर IPVersion सेट करता है। आदेश में एक यूआरएल एक IPv6 होस्ट नाम युक्त अनुरोध करने के लिए, यह कोष्ठक में लिपटे होने की जरूरत है जैसे:

Result := IdHttp1.Get('http://[www.six.heise.de]/') 
+0

यह काम करता है, लेकिन है एक नहीं बल्कि अजीब समाधान, एक वेब ब्राउज़र http स्वीकार नहीं करते: // [www .six.heise.de] /। क्या कोई वेबसाइट आईपीवी 4 या आईपीवी 6 है या नहीं, और आईपीवी 6 के मामले में यूआरएल में ब्रैकेट जोड़ना है? – Casady

+2

यूआरएल में इस्तेमाल किए गए आईपीवी 6 पते को ब्रैकेट किया जाना चाहिए, प्रति [आरएफसी 2732] (http://tools.ietf.org/html/rfc2732)। होस्टनाम नहीं करते हैं, लेकिन वर्तमान में आईपीवी 4 बनाम आईपीवी 6 का उपयोग करने के लिए समय से पहले जानने के लिए 'TIdHTTP' का कोई अन्य साधन नहीं है। जब कोई वेबब्रोसर किसी URL से कनेक्ट होता है, तो यह होस्ट के नाम को DNS के माध्यम से अपने उपलब्ध आईपीवी 4/आईपीवी 6 पते प्राप्त करने के लिए हल करता है और फिर एक सफल होने तक उनसे कनेक्ट करने का प्रयास करता है। 'TIdTCPClient' 'IPVersion' सेट होने के बाद होस्टनाम को हल करता है और एक आईपीवी 4/आईपीवी 6 सॉकेट बनाया गया है। यह एकाधिक आईपी से कनेक्ट करने का प्रयास नहीं करता है। भविष्य में इसे बदलना पड़ सकता है। –

+4

अभी के लिए, आप 'TIdHNSResolver' का उपयोग मेजबाननाम के मैन्युअल DNS लुकअप करने के लिए पहले उचित प्रारूपित URL के साथ' TIdHTTP' का उपयोग कर सकते हैं। –

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