none
Manejo de Cookies en HTTPWebRequest RRS feed

  • Pregunta

  • Hola a todos

    Amigos, estoy blokeado con un problema que no puedo superar, posiblemente por no entender 100% cómo funcionan las cookies. Favor su ayuda.

    Debo recuperar una tabla de datos html desde un servidor web via http. El server no tiene servicios publicados ni tampoco puertos abiertos por donde realizar una conexion directa.

    Usando cualquier browser conocido y despues de realizar el primer request a la pagina, se crea en mi navegador una cookie, la que almacena datos de sesion para que el server reconozca futuras conexiones.

    El punto es que necesito acceder al contenido html usando HTTPWebrequest a traves de programacion, pero la cookie me esta dando problemas porque no sé como recuperar el valor que se genera y se guarda en ella para despues, en siguientes llamadas HTTPWebrequest, usar el id de sesion que el server me exige.

    Ahora bien, me pasa algo curioso.

    1. Logro emular la conexion pasando todos los paremtros en el header y tambien via post(con HTTPWebrequest)
    2. El response me devuelve en el header el token o id de sesion que se supone usare en proximas conexiones
    3. realizo una nueva llamada pasando todos los parametros agregando tambien una cookie con el id de sesion antes recibido
    4. el server me responde : Error 500: Cannot find bean under name LabelBox

    SIN EMBARGO, si a la cookie que envíe arriba, le coloco el Id de sesion de una conexion establecida a traves de un browser tradicional(lo recueperé manualmente buscando la cookie en el navegador), FUNCIONA PERFECTO!!, pero en cambio colocando la id que recuperé antes usando httpwebresquest en programacion no pasa nada y  es como que el server no la reconoce.

    San Fiddler me ha dado luz pero aun no veo la razon!

    Amigos, espero haberme explicado. Disculpen lo largo del post pero debi ocupar todas esas lineas para explicar.

    Aqui va un poco de codigo usado:


    HttpWebRequest hRequest = ((HttpWebRequest)WebRequest.Create(laUrl));                
                    hRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2";
                    hRequest.AllowAutoRedirect = true;
                    hRequest.ContentType = "application/x-www-form-urlencoded";                
                    hRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                    hRequest.Method = "POST";                
                    hRequest.Headers.Add("Accept-Encoding", "gzip, deflate");
                    hRequest.Headers.Add("Accept-Language", "es-ES");
                    hRequest.Headers.Add("Pragma", "no-cache");

    hRequest.CookieContainer.Add(new Uri("http://tuurl.com/WEB/"), new Cookie("JSESSIONID", sTokenID));

    string res = string.Empty;
                    using (System.IO.Stream s = hRequest.GetRequestStream())
                        {
                            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(s))
                                sw.Write(sVariablesPost);
                        }

                        using (System.IO.Stream s = hRequest.GetResponse().GetResponseStream())
                        {
                            using (System.IO.StreamReader sr = new System.IO.StreamReader(s))
                            {
                                 res = sr.ReadToEnd();
                                sr.Close();
                            }
                        }









    Roberto Soto "Lo que no se mide no existe"

    miércoles, 12 de marzo de 2014 20:30

Respuestas

  • Estimados ya lo solucioné. Pero por si a alguien le sirve la experiencia, el problema se debía a que después del primer request era necesario ejecutar otros a continuación que validaban la sesión que se creaba con el primero en el server. Seguro esas otras llamadas "algo" confirmaban o el server seteaba variables de sesión a partir de ellas. El caso que todo el código en c# estaba ok solo que faltaba eso. San Fiddler ayudo.

    Gracias

    Roberto


    Roberto Soto "Lo que no se mide no existe"

    • Marcado como respuesta -RaSv- jueves, 13 de marzo de 2014 11:52
    jueves, 13 de marzo de 2014 11:52