2009-03-16 14 views
9

estoy iniciar sesión en un sitio utilizando un WebBrowser, entonces yo quiero usar expresiones regulares para obtener algunos datos, pero WebRequest no usamos Web Navegar galleta,C# WebRequest usar WebBrowser, galletas

mi Webbrowser es en público, ¿hay alguna forma de utilizar la cookie WebBrowser en webRequest?

+0

realmente simple quiero usarlo para recibir noticias :) pero el sitio está protegido por la página de inicio de sesión, así que de esta manera es más fácil iniciar sesión :) – madman

Respuesta

7

Puede usar un CookieContainer para una Webrequest.

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

myWebRequest.CookieContainer = web_cookies; 

Espero que esto ayude.

Ok, usted quiere hacer un inicio de sesión. Esa es una historia diferente. Puede usar NetworkCredential para eso.

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

¿Puede agregar algún comentario a este código? No puedo deshacerme de – madman

+1

No estoy exactamente seguro de lo que quieres hacer. Quizás esta página ayude: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.cookiecontainer.aspx – TalkingCode

+2

En realidad, la mayoría de los sitios web usan cookies para auth en lugar de HTTP auth, por lo que usan un networkCredential no ayudará. Adjuntar el contenedor de cookies funcionará siempre que reciba las cookies de IE; si no, PInvoke a 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; 
    } 

Esto funcionará en la mayoría de los sitios, sin embargo los sitios que utilizan subdominios puede ser un problema.

+3

Parece que esta solución ya no funciona debido a las cookies que utilizan el modificador "httponly". Eso los hace invisibles de las secuencias de comandos. –

+0

Puede acceder a las cookies de HttpOnly a través de InternetGetCookieEx –

0

¿es esto Silverlight? en caso afirmativo, ya que Silverlight 3 si usa la pila de red del navegador, entonces debería obtener las cookies de forma gratuita. Por defecto obtienes la pila del navegador cuando creas n HttpWebrequest usando el método WebRequest.Create(). nota si utiliza el método CreateHTTP, obtiene una pila cliente, que no incluye cookies del navegador por defecto (tiene que hacer trucos para obtenerlos, como se describió anteriormente)

ver http://msdn.microsoft.com/en-us/library/dd920295(VS.95).aspx sobre las pilas de red en Silverlight desde la versión 3