2010-06-04 10 views
23

Estoy creando una aplicación para la recuperación de datos desde la página web. La página está protegida con contraseña y cuando el usuario inicia sesión, se crea la cookie.cómo usar cookies con HttpWebRequest

Para recuperar los datos primero la aplicación tiene que iniciar sesión: hacer una solicitud web con nombre de usuario y contraseña y almacenar la cookie. Luego, cuando se almacena la cookie, debe agregarse a los encabezados de todas las solicitudes.

aquí es el método que realiza peticiones y recupera el contenido:

public void getAsyncDailyPDPContextActivationDeactivation() 
    { 
     HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(dailyPDPContextActivationDeactivation); 

     IAsyncResult asyncResult = httpWebRequest.BeginGetResponse(null, null); 

     asyncResult.AsyncWaitHandle.WaitOne(); 

     using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.EndGetResponse(asyncResult)) 
     using (StreamReader responseStreamReader = new StreamReader(httpWebResponse.GetResponseStream())) 
     { 
      string responseText = responseStreamReader.ReadToEnd(); 
     } 

    } 

¿Alguien sabe cómo modificar este método con el fin de añadir una cookie en el encabezado?

A continuación se muestra la pantalla de impresión de la estructura de la cabecera de la solicitud con el navegador:

alt text http://img404.imageshack.us/img404/4793/cookiea.jpg

Me gustaría también agradecer si alguien sugiere una manera de almacenar cookies de la respuesta (cuando las marcas de aplicaciones una solicitud http: xxx.xxx.xxx/login? username = xxx & password = xxx la cookie se ha creado y debe almacenarse para futuras solicitudes).

Respuesta

32
CookieContainer cookieContainer = new CookieContainer(); 
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(...); 
httpWebRequest.CookieContainer = cookieContainer; 

Luego se vuelve a utilizar esta CookieContainer en las solicitudes posteriores:

HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(...); 
httpWebRequest2.CookieContainer = cookieContainer; 
+1

No entiendo realmente. ¿Por qué pondría un contenedor de galletas recién creado (por lo que está vacío) en la solicitud que está a punto de enviar? ¿No debería ser mucho más lógico que tengas que llenar esa cookieContainer más adelante con la respuesta? ¿Hay alguna razón por la cual sea así? editar: Muchas respuestas se dan de esta manera, pero simplemente no puedo entender por qué se hace de esta manera. – deltu100

+0

Mi aplicación tiene un comportamiento no deseado al usar eso. Uso de httpWebRequest2.Headers.Set ("Cookie", ... funciona bien. – Eduardo

+0

Si he iniciado sesión en la página web anteriormente, hay una cookie almacenada en mi HD para poder omitir el registro de manera programática. la solicitud web busca automáticamente y llena el contenido con las cookies encontradas, o ¿tiene que hacerlo manualmente? ¿Cómo se hace eso, si este último? –

Cuestiones relacionadas