2009-03-16 8 views
9

Ich bin in eine Website anmelden einen Web-Browser verwenden, dann möchte ich Regex verwenden, um einige Daten zu bekommen, aber webRequest nur knapp sein Ziel bedienbare Web Browsen Cookie,C# webRequest mit WebBrowser Cookie

meine Web-Browsers in der Öffentlichkeit ist, gibt es eine Möglichkeit, WebBrowser-Cookie in webRequest zu verwenden?

+0

wirklich einfach ich will es für Nachrichten verwenden :) aber Website durch Login-Seite geschützt, so auf diese Weise am einfachsten Login :) – madman

Antwort

7

Sie können einen CookieContainer für eine Webanforderung verwenden.

web_cookies = new CookieContainer(); 
// Create a 'WebRequest' object with the specified url.     
HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(url); 

myWebRequest.CookieContainer = web_cookies; 

Hoffe, das hilft.

Ok, du willst dich anmelden. Das ist eine andere Geschichte. Sie können dafür NetworkCredential verwenden.

public string get_secure_webpage(string url, string username, string password) 
    { 
     WebRequest myWebRequest = WebRequest.Create(url); 
     NetworkCredential networkCredential = new NetworkCredential(username, password); 
     myWebRequest.Credentials = networkCredential; 

...

+0

können Sie einen Kommentar zu diesem Code hinzufügen? Ich kann nicht undest – madman

+1

Ich bin nicht genau sicher, was Sie tun möchten. Vielleicht wird diese Seite helfen: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.cookiecontainer.aspx – TalkingCode

+2

Tatsächlich verwenden die meisten Websites Cookies für Auth statt HTTP Auth, so dass ein NetworkCredential wird nicht helfen. Das Anhängen des Cookie-Containers funktioniert so lange, wie die IE-Cookies abgerufen werden. Wenn nicht, PInvoke to InternetGetCookie() – EricLaw

12
public CookieContainer GetCookieContainer() 
    { 
     CookieContainer container = new CookieContainer(); 

     foreach (string cookie in webBrowser1.Document.Cookie.Split(';')) 
     { 
      string name = cookie.Split('=')[0]; 
      string value = cookie.Substring(name.Length + 1); 
      string path = "/"; 
      string domain = ".google.com"; //change to your domain name 
      container.Add(new Cookie(name.Trim(), value.Trim(), path, domain)); 
     } 

     return container; 
    } 

Diese auf den meisten Websites arbeiten jedoch Websites, die Sub-Domains verwenden, könnte ein Problem sein.

+3

Diese Lösung scheint nicht mehr zu funktionieren, da Cookies den Modifikator "httponly" verwenden. Das macht sie beim Scripting unsichtbar. –

+0

Sie können auf die HttpOnly-Cookies über InternetGetCookieEx zugreifen –

0

ist das Silverlight? Wenn ja, seit silverlight 3 Wenn Sie den Browser-Netzwerk-Stack verwenden, sollten Sie Cookies kostenlos erhalten. Standardmäßig erhalten Sie den Browser-Stack, wenn Sie n HttpWebrequest mit der WebRequest.Create() -Methode erstellen. Hinweis: Wenn Sie die CreateHTTP-Methode verwenden, erhalten Sie einen Client-Stack, der standardmäßig keine Browser-Cookies enthält (Sie müssen Tricks durchführen, um sie wie zuvor beschrieben zu erhalten)

siehe http://msdn.microsoft.com/en-us/library/dd920295(VS.95).aspx über die Netzwerk-Stacks in Silverlight seit Version 3