2010-05-13 3 views
22

Je charge un site Web à l'aide de la fonction Navigate de WebBrowser et je souhaite que le navigateur charge la page avec un cookie que je lui ai fourni.Définition d'un cookie dans un contrôle WebBrowser

Le code suivant ne fonctionne pas:

wb.Navigate(url, null, null, "Cookie: " + cookie + "\n"); 

Qu'est-ce que je fais mal? Devrai-je utiliser InternetSetCookie? Cela ne semble pas être la meilleure solution.

+0

Avez-vous trouvé une réponse à cette question? –

+0

Malheureusement, non. –

Répondre

19

On dirait qu'il ya une meilleure façon:

Importer la fonction InternetSetCookie:

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

Créer l'objet Cookie:

Cookie temp1 = new Cookie("KEY1", "VALUE1", "/Path/To/My/App", "/"); 

appel InternetSetCookie fonction pour définir le cookie pour cette URL

InternetSetCookie("https://my.url.com/Path/To/My/App", null, temp1.ToString() + "; expires = Sun, 01-Jan-2013 00:00:00 GMT"); 

Navigate le WebBrowser à l'URL que vous souhaitez atteindre.

webBrowser1.Navigate("https://my.url.com/Path/To/My/App"); 

pense que c'est la meilleure solution pour la question :).

+1

Pour ceux qui essaient d'obtenir la partie 'expires =' d'un objet DateTime, voici comment le faire: myDateTimeObj.ToUniversalTime().ToString("ddd, dd-MMM-yyyy HH:mm:ss") + " GMT" Daniel

+0

Lien mort, mais heureusement, vous avez collé le code! – TEK

+0

Si vous devez définir un cookie en mémoire pour la session uniquement, vous pouvez appeler directement: InternetSetCookieEx ("https://my.url.com/Path/To/My/App", "KEY1", "VALUE1" , NULL NULL). Remarque: il existe une différence entre l'appel InternetSetCookie et InternetSetCookieEx (http://blogs.msdn.com/b/ieinternals/archive/2009/08/20/wininet-ie-cookie-internals-faq.aspx). En pratique, j'ai observé que toute requête ultérieure faite par la page contient le cookie seulement si vous utilisez la méthode "Ex". –

3

The proper way is using InternetSetCookieEx.

[DllImport("wininet.dll")] 
static extern InternetCookieState InternetSetCookieEx(
    string lpszURL, 
    string lpszCookieName, 
    string lpszCookieData, 
    int dwFlags, 
    int dwReserved); 

enum InternetCookieState : int 
{ 
    COOKIE_STATE_UNKNOWN = 0x0, 
    COOKIE_STATE_ACCEPT = 0x1, 
    COOKIE_STATE_PROMPT = 0x2, 
    COOKIE_STATE_LEASH = 0x3, 
    COOKIE_STATE_DOWNGRADE = 0x4, 
    COOKIE_STATE_REJECT = 0x5, 
    COOKIE_STATE_MAX = COOKIE_STATE_REJECT 
} 

est ici un code pour le tester à un website that shows your HTTP headers.

InternetSetCookieEx("http://request.urih.com/", null, "TestData=Test;", 0, 0); 
webBrowser1.Navigate("http://request.urih.com/"); 
+0

Je reçois des cookies en double lorsque je fais cela. J'ai essayé le domaine des cookies avec et sans fin slash. J'ai essayé la valeur avec et sans le point-virgule. J'ai essayé de ne pas couper la paire nom/valeur et le rognage. Je me demandais simplement si dans la production vous avez trouvé un problème, corrigé le réglage des cookies et n'a peut-être pas mis à jour votre réponse. –

+0

Pour clarifier, lorsque je mets des cookies que j'ai enregistrés dans une base de données et que le site Web d'un tiers les définit, ils finissent par les dupliquer. –

Questions connexes