example create code c# cookies httpwebrequest

create - using httpwebrequest c#



¿Cómo puedo saber qué cookie(s) son necesarias para hacer una solicitud HttpWebRequest correcta? (5)

Estoy trabajando en un administrador de descargas y tratando de obtener los contenidos requeridos por las cookies utilizando HttpWebRequest . Quiero integrar mi aplicación a Chrome para que pueda obtener los encabezados y valores de cookies necesarios desde el navegador.

Pero primero necesito saber si se requieren cookies para obtener un contenido para descargar y qué cookies son. No puedo encontrar ningún recurso útil sobre este tema.

Esto es lo que me imagino:

HttpWebRequest req = (WebRequest.Create(url)) as HttpWebRequest; //At first, get if cookies are necessary? //If it is, get the required cookie headers //Then add the cookies to the request CookieContainer cc = new CookieContainer(); Cookie c1 = new Cookie("header1", "value1"); Cookie c2 = new Cookie("header2", "value2"); CookieCollection ccollection = new CookieCollection(); ccollection.Add(c1); ccollection.Add(c2); cc.Add(uri, ccollection); req.CookieContainer = cc; //Get response and other stuff......

¿Cómo puedo hacer estos pasos?


Definitivamente debería integrar las cookies porque los sitios web que requieren identificar los datos configurados por el usuario en las cookies

sin ese token no puedes realizar la descarga

Las cookies que se utilizarán dependen del sitio, no puede adivinar si el sitio las necesita o no, cuáles son necesarias o no

Si está utilizando .Net 4.5+, considere usar el método estático "WebRequest.CreateHttp" https://msdn.microsoft.com/fr-fr/library/ff382788(v=vs.110).aspx

Mantenga un registro del CookieContainer, que eventualmente se llenará con una nueva cookie de respuesta (el encabezado Set-Cookie en respuesta)

nota: las cookies están vinculadas a un dominio (es decir, .com) Le sugiero que instale una extensión de cookie en su navegador Chrome para jugar


Esto depende de la descarga real que desee realizar y los requisitos del servidor. La mayoría de los servidores permitirán la descarga independientemente de las cookies.
Sin embargo, siempre puedes enviar cookies por si acaso. ¿Qué galletas necesitas? Aquí hay algunas reglas sobre cómo lo hacen los navegadores: Las cookies tienen atributos de dominio y ruta. El dominio se aplica a los subdominios. Por lo tanto, si se realiza una solicitud para http://foo.bar.com/some/path , se enviarán las siguientes cookies:
-Aquellos con dominio com, bar.com y foo.bar.com sin ruta
- Igual que el anterior pero que tiene rutas como / some o some / path etc.

No enviará cookies de otros dominios ni de los dominios mencionados anteriormente, pero con una ruta que no se encuentra en la ruta de solicitud.

Por lo tanto, tendría que buscar las cookies de la misma manera, dependiendo de la URL del archivo que debe descargar.


Habría agregado un comentario en su lugar, pero no tengo suficiente reputación. Pareces estar en el camino correcto. La sugerencia de Mateusz Radny de utilizar EditThisCookie le permitirá explorar las cookies que tiene en su navegador, pero para cualquier servidor web en particular, generalmente no necesita decidir qué cookie es cuál (por lo que realmente no necesita preocuparse, cuál es el cookie de inicio de sesión).

El protocolo para las cookies es que el navegador debe devolver las cookies que el servidor web envió inicialmente al navegador para ese sitio web en particular. Puede ayudar a leer un poco más sobre las cookies: https://en.wikipedia.org/wiki/HTTP_cookie (probablemente salte a Implementación , y luego lea un poco en Privacidad y cookies de terceros porque realmente no quiere compartir cookies de un sitio web con otros sitios web).

Por lo tanto, si asume que desea emular lo que enviaría el navegador, asegúrese de que su administrador de descargas también envíe el mismo conjunto de cookies que Chrome recibió de ese sitio web en particular y debería funcionar. Asimismo, evite almacenar en caché las cookies en su código, ya que su navegador actualizará las cookies (p. Ej., Eliminará las cookies caducadas) y, por lo tanto, siempre debe obtenerlas desde el navegador cada vez que las necesite.

* Nota: A veces, una cookie está marcada para ciertos tipos de conexiones solamente o para su uso con un dominio / subdominio particular o una ruta Uri. Si está configurado, entonces debe limitar el tiempo cuando envía esos de vuelta en función de si coincide con la conexión que está intentando establecer. Investigue esto por separado (las últimas especificaciones de RFC: https://tools.ietf.org/html/rfc6265 ).

PD: El servidor web puede enviar cookies nuevas o actualizadas como parte de la solicitud de descarga que realizó a través de su administrador de descargas. Si realmente quieres ser perfecto, debes copiarlos de tu administrador de descargas al conjunto de cookies de Chrome (aunque no estoy familiarizado con la API de Chrome, por lo que no estoy seguro de qué tan difícil sería).


Intente capturar las cookies desde la primera solicitud (puede ser una página de inicio de sesión) y agregue todas las que se encuentren en la próxima solicitud (solicitud de descarga). Algo así como abajo.

public void MakeRequest() { var container = new CookieContainer(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://example.com/loginpage"); request.Method = WebRequestMethods.Http.Get; request.CookieContainer = container; HttpWebResponse response = null; response = (HttpWebResponse)request.GetResponse(); //once you read response u need to add all cookie sent in header to the ''container'' so that it can be forwarded on second response foreach (Cookie cookie in response.Cookies) { container.Add(cookie); } HttpWebRequest downRequest = (HttpWebRequest)WebRequest.Create("http://example.com/downloadpage"); downRequest.Method = WebRequestMethods.Http.Get; downRequest.Proxy = null; //As you have added the cookies, this must response fine now downRequest.CookieContainer = container; response = (HttpWebResponse)downRequest.GetResponse(); var stream = response.GetResponseStream(); }

Espero que esto ayude.


Las cookies necesarias para obtener contenido de un servidor están especificadas por ese servidor en el encabezado "Set-Cookie" de la respuesta HTTP. El escenario genérico es:

  1. El cliente realiza una solicitud HTTP al servidor (puede ser una página de inicio de sesión o una página de descarga)
  2. El servidor responde con una respuesta HTTP que contiene encabezado (s) "Set-Cookie"
  3. El cliente recuerda todas esas cookies.
  4. El cliente utiliza las cookies almacenadas en el paso 3 para todas las solicitudes posteriores al mismo servidor

Ahora, considerando su escenario de integración en Chrome, imagino que las solicitudes iniciales (pasos 1 a 3) no serán realizadas por su aplicación, sino por el propio Chrome. Las cookies se almacenarán en la tienda de cookies de Chrome. Entonces, lo que su aplicación deberá hacer es obtener de Chrome todas las cookies para el dominio desde donde desea descargar e incluir esas cookies en su solicitud (paso 4).

Consulte el documento chrome.cookies sobre cómo usar la API de Chrome para interactuar con su almacén de cookies, y los documentos de Set-Cookie de Mozilla para obtener una descripción detallada de cómo se especifican las cookies en la respuesta HTTP.