2009-08-25 15 views
6

मैं कुछ समय के लिए पॉको नेट लाइब्रेरी के साथ खेल रहा हूं, यह काफी अच्छा है। बहुत सुविधाजनक और समझने में आसान है।पीओसीओ नेट सी ++ लाइब्रेरी में प्रॉक्सी प्रमाणीकरण

मैं प्रॉक्सी पता सेट करने में सक्षम था, और यह कह रहा है कि 407 प्रॉक्सी प्रमाणीकरण आवश्यक है। मैं लगा कि

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); 
req.setCredentials(scheme, authInfo); 

मैं की तरह "बुनियादी", "सादा पाठ" योजना में, और मूल्यों की कोशिश की "उपयोगकर्ता: पासवर्ड" authInfo में। यह काम नहीं लग रहा है। Google मदद नहीं कर रहा है।

क्या किसी ने पहले पॉको नेट का उपयोग करके ऐसा किया है? या क्या उपयोग स्पष्ट है और मैं सामान्य रूप से प्रॉक्सी प्रमाणीकरण की ओर मेरी अज्ञानता के कारण काम करने में सक्षम नहीं हूं? कृपया सलाह दें।

संपादित करें: कुछ और खेलने के बाद, मुझे लगता है कि रिमोट सर्वर प्रमाणीकरण जानकारी लॉगिन करने की अपेक्षा कर रहा है, तो सेट क्रेडेंशियल्स फ़ंक्शन का उपयोग किया जाता है। मैं पोको नेट पुस्तकालयों का उपयोग कर प्रॉक्सी प्रमाणीकरण करने का कोई तरीका नहीं ढूंढ पाया। मैं हालांकि प्रॉक्सी सर्वर और पोर्ट सेट करने में सक्षम था। यह मेरे पास होगा यदि प्रमाणीकरण के बिना केवल प्रॉक्सी सर्वर था:

HTTPClientSession session(uri.getHost(), uri.getPort()); 
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); 
session.setProxy("host", port); 
session.sendRequest(req); 

सहायता चाहिए।

संपादित करें: समाधान @StackedCrooked द्वारा सुझाए गए आधार पर, मैं अनुरोध करने से पहले अनुरोध हेडर के लिए प्रॉक्सी प्रमाणीकरण सेटिंग ब्यौरे की कोशिश की, और एक अन्य दृष्टिकोण इंटरनेट पर पाए में, मैं केवल एक करने के बाद प्रॉक्सी प्रमाणन विवरण सेट प्रारंभिक अनुरोध और 407 त्रुटि आती है, और फिर अनुरोध फिर से कर रही है। दोनों विधियां समान 407 त्रुटि देने पर रखी गईं। मेरे वर्तमान कोड इस तरह दिखता है:

HTTPClientSession session(uri.getHost(), uri.getPort()); 
HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); 
session.setProxy("10.7.128.1", 8080); 
req.set("Proxy-Authentication", "Basic bGVlbGE6bGVlbGExMjM="); 
session.sendRequest(req); 
+0

क्या आप codepad.org या कुछ पर टेस्टकेस डाल सकते हैं? मुझे अपने प्रॉक्सी के खिलाफ कोशिश करना अच्छा लगेगा। – joshperry

+1

मेरा मानना ​​है कि सही शीर्षलेख, जैसा कि @StackedCrooked सुझाया गया है, "प्रॉक्सी-प्रमाणीकरण" के बजाय "प्रॉक्सी-प्रमाणीकरण" है। क्या आपका वास्तविक कोड सही उपयोग कर रहा है? –

उत्तर

2

आप शायद HTTP हेडर के लिए प्रॉक्सी प्राधिकरण क्षेत्र जोड़ने की जरूरत है। पोको की HTTPRequest कक्षा में इसके लिए एक समर्पित विधि नहीं है। हालांकि, बाद से यह NameValueCollection वर्ग सार्वजनिक रूप से विरासत में आप इसे इस तरह सेट कर सकते हैं:

req.set("Proxy-Authorization" , "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="); 

कहाँ QWxhZGRpbjpvcGVuIHNlc2FtZQ== बेस 64 इनकोडिंग "अलादीन: खुले तिल" का संस्करण है।

HTTP प्रोटोकॉल के बारे में कुछ सीखने के बाद इनमें से बहुत सी समस्याएं आसान हो जाती हैं। अब मैं ज्यादातर खुद को प्रचार कर रहा हूं :)

+0

मैं इसे विभिन्न तरीकों से आजमा रहा हूं, यह हमेशा 407 त्रुटि देता है। कृपया प्रश्न में संपादन देखें। – Sahas

+0

हाँ, मैं इससे अधिक आपकी मदद नहीं कर सकता क्योंकि इस विषय पर मेरा ज्ञान भी सीमित है।मुझे आशा है कि आप अब तक एक समाधान पाया (या आप जल्दी ही एक पाएंगे कि!)। – StackedCrooked

+0

अलावा बुनियादी प्रमाणीकरण से वहाँ अन्य प्रमाणीकरणों कर रहे हैं - को पचाने NTLM, पासपोर्ट आदि WinHTP आप के लिए यह करता है (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383144(v=vs.85) .aspx)। मैं अगर पोको C++ (या किसी अन्य पुस्तकालय) भी ऐसा ही कर सकते हैं देखने के लिए उत्सुक हो जाएगा। – quixver

1

मैं इस अपने आप उपयोग नहीं किया है, लेकिन आप HTTPBasicCredentials वर्ग पर ध्यान दिया है? यह req.setCredentials को इसकी प्रमाणीकृत विधि के माध्यम से कॉल को लपेटता है। आप की तर्ज पर कुछ के साथ खत्म हो जाएगा:

HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); 
HTTPBasicCredentials cred("user", "password"); 
cred.authenticate(req); 
+0

बस कोशिश की। काम नहीं कर रहा है मुझे लगता है कि रिमोट सर्वर बुनियादी प्रमाणीकरण जानकारी की अपेक्षा कर रहा है जब HTTPBasicCredentials आवश्यक है। अब मुझे लगता है कि प्रारंभिक रूप से सेट किए गए सेट क्रेडेंशियल फ़ंक्शन भी इस उद्देश्य के लिए नहीं हैं। – Sahas

+1

यह काम करता है ... दूसरा उत्तर नहीं है (मैन्युअल रूप से पॉस्को एन्कोडर का उपयोग करके बेस 64 एन्कोडिंग)। – Homer6

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