¿Pasar cookie con HttpWebRequest en winforms?

Por favor vea el siguiente código:

    objCookieContainer = new CookieContainer();

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://website.com/login.php?user=xxx&pass=xxx");
    request.Method = WebRequestMethods.Http.Get;
    request.Timeout = 15000;
    request.Proxy = null;
    request.CookieContainer = objCookieContainer;

    HttpWebRequest newRequest = (HttpWebRequest)WebRequest.Create("http://website.com/page.php?link=url");
    newRequest.Method = WebRequestMethods.Http.Get;
    newRequest.Timeout = 15000;
    newRequest.Proxy = null;
    newRequest.CookieContainer = objCookieContainer;

    HttpWebResponse response = null;

    response = (HttpWebResponse)request.GetResponse();
    string readerRequest = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();

    response = (HttpWebResponse)newRequest.GetResponse();
    string readerNewRequest = new StreamReader(response.GetResponseStream()).ReadToEnd();

Después de usar el request.GetResponse (), la cookie se llena con datos y tiene su código de autenticación y también se rellena el readerRequest. Después de eso, llamé newRequest.GetResponse (), pero el readerNewRequest está vacío. Intenté hacerlo. muchas cosas, pero siempre el mismo resultado, la única forma en que he resuelto esto es mediante el uso de un objeto WebBrowser en el que paso la url y pude obtener el contenido utilizando WebBrowser.DocumentStream.

Como puedo resolver esto ?

 ykh28 ene. 2013 08:08
Lo siento, fue por error, claramente quiero GET, pero incluso con get es lo mismo. Voy a actualizar mi código.
 ryadavilli28 ene. 2013 07:36
¿Qué pasa si lees la respuesta de la primera solicitud antes de hacer la segunda?
 ykh28 ene. 2013 07:45
El contenido se recupera.
 Ichabod Clay28 ene. 2013 07:55
¿Hay alguna razón por la que estás usando elPOST ¿Método para la segunda solicitud, aunque no esté agregando ningún dato al final de la solicitud? A un lado, asegúrese de envolver suHttpWebResponse en unusing declaración, o asegúrese de llamarresponse.Close() después de que hayas terminado de usar la respuesta.

Respuestas a la pregunta(1)

    private void button1_Click(object sender, EventArgs e)
    {
        var objCookieContainer = new CookieContainer();

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://website.com/login.php?user=xxx&pass=xxx");
        request.Method = WebRequestMethods.Http.Get;
        request.Timeout = 15000;
        request.Proxy = null;
        request.CookieContainer = objCookieContainer;

        HttpWebRequest newRequest = (HttpWebRequest)WebRequest.Create("http://website.com/page.php?link=url");
        newRequest.Method = WebRequestMethods.Http.Post;
        newRequest.Timeout = 15000;
        newRequest.Proxy = null;


        HttpWebResponse response = null;

        response = (HttpWebResponse)request.GetResponse();
        //once you read response u need to add all cookie sent in header to the 'objCookieContainer' so that it can be forwarded on second response
        foreach (Cookie cookie in response.Cookies)
        {
            objCookieContainer.Add(cookie);
        }
        string readerRequest = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd();


        //since you have added the cookies, this must response fine now
        newRequest.CookieContainer = objCookieContainer;
        response = (HttpWebResponse)newRequest.GetResponse();
        string readerNewRequest = new StreamReader(response.GetResponseStream()).ReadToEnd();
    }

puede encontrar un error de CookieContainer: verifiqueEste enlace

 ykh28 ene. 2013 07:50
Estoy pasando el objCookeContainer para las solicitudes de molestia, de modo que cuando se llene por primera vez pasará a la segunda solicitud. De todos modos me canse tu código sigue sin funcionar. Estoy usando .Net 4.0

Su respuesta a la pregunta