2010-11-15 16 views
10

में कुकी कोंटेनर से कुकीज का उपयोग करें क्या कोई तरीका है कि मैं वास्तव में कुकी कंटेनर से कुकीज़ का उपयोग कर सकता हूं (पहले WebRequest से लिया गया) और उन्हें WebBrowser नियंत्रण में उपयोग करें? यदि हां, तो मैं यह कैसे करूं? यह सी # में विनफॉर्म एप्लिकेशन के लिए है।WebBrowser

उत्तर

9

आपको InternetSetCookie का उपयोग करने की आवश्यकता है। यहाँ एक sample है ...

public partial class WebBrowserControl : Form 
{ 
    private String url; 

    [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 
    public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData); 

    public WebBrowserControl(String path) 
    { 
      this.url = path; 
      InitializeComponent(); 

      // set cookie 
      InternetSetCookie(url, "JSESSIONID", Globals.ThisDocument.sessionID); 

      // navigate 
      webBrowser.Navigate(url); 
    } 
} 
+0

मैं पहले से ही कुकी कंटेनर और इसके अंदर कुकीज़ मिल गया है, मैं क्या जरूरत है वेब ब्राउजर नियंत्रण के साथ उन कुकीज़ का उपयोग करने के लिए, लेकिन मुझे यकीन नहीं है कि मैं इनका उपयोग कैसे कर सकता हूं। आपने मुझे जो भेजा है, वह दिखाता है कि कुकीज़ को कैसे निकाला जाए लेकिन यह वर्णन नहीं करता कि उन्हें ब्राउज़र में कैसे सेट किया जाए। – Alex

+0

@Alex, अतिरिक्त टिप्पणी जोड़ा ... –

+0

बात करता है। मुझे वेबरेक्वेस्ट के लिए इसकी आवश्यकता नहीं है। मुझे इसे वेब ब्राउजर के लिए चाहिए। – Alex

4

यहाँ एक उदाहरण इस ओह कैसे प्राप्त किया जा सकता है:

private class CookieAwareWebClient : WebClient 
{ 
    public CookieAwareWebClient() 
    { 
     CookieContainer = new CookieContainer(); 
    } 

    public CookieContainer CookieContainer { get; private set; } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     var request = base.GetWebRequest(address); 
     var httpRequest = request as HttpWebRequest; 
     if (httpRequest != null) 
     { 
      httpRequest.CookieContainer = CookieContainer; 
     } 
     return request; 
    } 
} 


private void Form1_Load(object sender, EventArgs e) 
{ 
    using (var client = new CookieAwareWebClient()) 
    { 
     client.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials; 
     client.DownloadData("http://www.google.com"); 
     var cookies = client.CookieContainer.GetCookies(new Uri("http://www.google.com")); 
     var prefCookie = cookies["PREF"]; 
     webBrowser1.Navigate("http://www.google.com", "", null, "Cookie: " + prefCookie.Value + Environment.NewLine); 
    } 
} 
1

पहले navitation के लिए पहली बार उपयोग "ग्राहक" CookedWebClient करने की कोशिश करो और सर्वर से सभी कुकी प्राप्त । तो फिर तुम CookedWebClient से CookedContainer, या WebRequest जैसे कुछ अन्य स्रोत ले जा सकते हैं, और उन्हें WebBrowser में उपयोग के रूप में नीचे दिखाया गया है:

namespace ExampleWebBrowser 
{ 
    public partial class Form1 : Form 
    { 
     [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData); 

     CookedWebClient client = new CookedWebClient(); 

     .. 
     .. 
     .. 

     private void usingWebBrowserWithWebClientCookies(string url) 
     { 
      CookieCollection cookies = client.Cookies.GetCookies(url); 
      for (int i = 0; i < cookies.Count; i++) 
      { 
       Cookie c = cookies[i]; 
       InternetSetCookie(url, c.Name, c.Value); 
      } 
      webBrowser1.Navigate(url); 
     } 
    } 

    public class CookedWebClient : WebClient 
    { 
     CookieContainer cookies = new CookieContainer(); 
     public CookieContainer Cookies { get { return cookies; } } 
     protected override WebRequest GetWebRequest(Uri address) 
     { 
      WebRequest request = base.GetWebRequest(address); 
      if (request.GetType() == typeof(HttpWebRequest)) 
       ((HttpWebRequest)request).CookieContainer = cookies; 
      return request; 
     } 
    } 
} 
संबंधित मुद्दे