2009-12-29 20 views
7

क्या वेबब्राउज़र नियंत्रण का उपयोग करने वाली कुकीज़ को पढ़ने/लिखने का कोई तरीका है?एक WPF WebBrowser नियंत्रण में कुकीज़ प्रबंधित करना?

मैं कुछ इस तरह कर रहा हूँ ...

string resultHtml; 
HttpWebRequest request = CreateMyHttpWebRequest(); // fills http headers and stuff 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
{ 
    resultHtml = sr.ReadToEnd(); 
} 
WebBrowser browser = new WebBrowser(); 
browser.CookieContainer = request.CookieContainer; // i wish i could do this :(
browser.NavigateToString(resultHtml); 

उत्तर

6

WebBrowser नियंत्रण नेटवर्किंग के लिए WinInet का उपयोग करता है, विशेष रूप से कुकी प्रबंधन के लिए InternetSetCookie (पूर्व) और InternetGetCookie (पूर्व) कार्यों का उपयोग। .NET में WinInet wrapper नहीं है, लेकिन आप पी-इनवोक कर सकते हैं।

+0

+1, मुझे इन एपीआई के बारे में पता नहीं था ... किसी दिन उपयोगी साबित हो सकता है! –

3

हाँ आप सही हैं, इंटरनेट GetCookieEx केवल कुकीज़ को पुनर्प्राप्त करने का एकमात्र तरीका है और यह WebBrowser नियंत्रण से कुकी को पकड़ने का पसंदीदा तरीका है।

मैं एक complete example here

0

मैं एक ही मुद्दे का सामना करना पड़ा कुछ दिन पहले पोस्ट की। पिछले उत्तरों के उदाहरणों के अलावा, वेबब्रोसर नियंत्रण के लिए यहां एक Win32 wrapper है। इस कार्यान्वयन का लाभ यह है कि यह डिफ़ॉल्ट वेब ब्राउजर नियंत्रण को अधिक विकल्प दिखाता है।

दुर्भाग्य से यदि यह WPF मूल नहीं है, तो यदि आप इसे WPF में उपयोग करने की योजना बना रहे हैं तो आपको एक रैपर बनाना होगा।

http://code.google.com/p/csexwb2/

6

WebBrowser नियंत्रण और कुकीज़ के बारे में संभावित रूप से भ्रामक बातों में से एक है कि एक पहली नजर में, यह अक्सर की तरह अपने app एक अलग कुकी स्टोर हो जाता है लग रहा है है। उदाहरण के लिए, यदि आप किसी ऐसी साइट पर लॉग इन करते हैं जो आपको पहचानने के लिए एक सतत कुकी संग्रहीत करता है, तो क्या आप उस साइट के लिए उस साइट के लिए लॉग इन होने लगते हैं, जिसमें नियंत्रण होस्ट करने वाले ऐप के अंदर से आप इंटरनेट एक्सप्लोरर के माध्यम से लॉग इन होने लगते हैं ।

वास्तव में, आप विभिन्न पहचानों के साथ भी लॉग इन कर सकते हैं।

हालांकि, यह निष्कर्ष निकालना स्वाभाविक हो सकता है कि WebBrowser होस्ट करने वाले प्रत्येक ऐप को इसलिए अपनी कुकी मिलती है, वास्तव में यह सच नहीं है। कुकीज के केवल दो सेट हैं: 'कम अखंडता' मोड में उपयोग किया जाता है (जो कि आईई डिफ़ॉल्ट रूप से चलता है), और दूसरा सेट, जो आपको एक सामान्य ऐप में मिलेगा जो WebBrowser होस्ट करता है और यह भी यदि आप IE उन्नत करते हैं तो आपको क्या मिलेगा।

+1

कुकीज को पढ़ने और लिखने के सवाल का जवाब नहीं देता है। – Kurren

+1

@ कुररेन लेकिन यह पता लगाता है कि ओप क्या करने का प्रयास कर रहा था - स्रोत कोड देखें और यह स्पष्ट है कि लक्ष्य बदलना था ('लिखना') या खोजना ('पढ़ना') ब्राउज़र का कौन सा सेट सेट ब्राउज़र था का उपयोग करते हुए। इसके अलावा, मेरा जवाब बताता है कि WebBrowser एक ही कुकी स्टोर का उपयोग करता है जो IE हमेशा उपयोग करता है, जो आपको बताता है कि कुकीज़ वेबब्राउज़र का उपयोग करने के तरीके के बारे में कुछ भी खास नहीं है - आप इसे वैसे ही करते हैं जैसा आप हमेशा करेंगे। और चूंकि शेंग जियांग ने पहले ही दिखाया है कि ऐसा करने के लिए, मुझे दोहराने में कोई बात नहीं होगी; मेरा लक्ष्य उपयोगी अतिरिक्त जानकारी प्रदान करना था। –

2

आप Application.GetCookie और Application.SetCookie विधियों का उपयोग कर सकते हैं।

हालांकि एप्लिकेशन WPF से कम या कम संबंधित है, लेकिन आप इन तरीकों का उपयोग किसी भी डेस्कटॉप .NET कोड में कर सकते हैं। वास्तव में, वे InternetGetCookieEx और InternetSetCookieEx विंडोज एपीआई पर रैपर हैं।

+0

मैंने एप्लिकेशन की कोशिश की। गेटकुकी और मुझे जो कुछ मिला वह NO_MORE_ITEMS नहीं था। जब मैंने Alkampfer से नमूना कोड का उपयोग किया जो InternetGetCookieEx का उपयोग करता था तो उसने सीधे कुकीज़ को वापस कर दिया।मुझे लगता है कि एप्लिकेशन दिनचर्या द्वारा भेजे गए विभिन्न पैरामीटर होना चाहिए जो इसे मेरी कुकीज़ प्राप्त करने से रोकते हैं। [केवल सत्र], [केवल सुरक्षित], [केवल एचटीपी]। –

+0

हां, alkampfer का कोड INTERNET_COOKIE_HTTPONLY ध्वज का उपयोग करता है, जबकि Application.GetCookie नहीं करता है। यह अंतर हो सकता है। आप यहां कोड देख सकते हैं: http://referencesource.microsoft.com/#PresentationCore/src/Core/CSharp/MS/Internal/AppModel/CookieHandler.cs –

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