Enviar cookies en HttpWebRequest C#

Iniciado por Miguel2706, 31 Octubre 2013, 21:59 PM

0 Miembros y 1 Visitante están viendo este tema.

Miguel2706

Hola amigos, este es mi primer mensaje. Les escribo para ver si alguno de ustedes sabe como enviar una cookie en C#, mediante una solicitudo POST con HttpWebRequest. Hasta ahora tengo el siguiente código (es para iniciar sesión en Mediawiki):
Código (csharp) [Seleccionar]
 
public string Post(Uri wiki, string uri, string post_data, CookieCollection cookie = null)
      {
               try
                {
                    // create a request
                    HttpWebRequest request = (HttpWebRequest)
                    WebRequest.Create(uri); request.KeepAlive = true;
                   request.Headers.Add("Accept-Encoding", "gzip");
                   request.AutomaticDecompression = DecompressionMethods.GZip;
                    //if cookies parameters not is false, send the cookies!
                    if (cookie != null)
                    {
                        request.CookieContainer = new CookieContainer();
                        request.CookieContainer.Add(wiki, cookie);

                    }
                    request.ProtocolVersion = HttpVersion.Version10;
                    request.Method = "POST";
                    //The fantastic user agent
                    request.UserAgent = "inteliBOT/1.0 (https://es.wikipedia.org/wiki/Usuario:InteliBOT)";
                    System.Net.ServicePointManager.Expect100Continue = false;
                    // turn our request string into a byte stream
                    byte[] postBytes = Encoding.UTF8.GetBytes(post_data);

                    // this is important - make sure you specify type this way
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.ContentLength = postBytes.Length;
                    Stream requestStream = request.GetRequestStream();

                    // now send it
                    requestStream.Write(postBytes, 0, postBytes.Length);
                    requestStream.Close();

                    // grab te response and print it out to the console along with the status code
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    StreamReader Reader = new StreamReader(response.GetResponseStream());
                    string respuesta = Reader.ReadToEnd();
                    return respuesta;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    MessageBoxButtons buttons = MessageBoxButtons.OK;
                    string message = e.Message;
                    string caption = "Error";
                    DialogResult dresult;
                    dresult = MessageBox.Show(message, caption, buttons, MessageBoxIcon.Error);
                    login.ActiveForm.Show();
                    loging.ActiveForm.Close();
                    return e.Message;
                }

Y así es como llamo a la función:
Código (csharp) [Seleccionar]
Cookie CookieSession = new Cookie(prefix + "_session", session);
                Cookie CookieToken = new Cookie(prefix + "Token", token);
                CookieCollection Cookies = new CookieCollection();
                Cookies.Add(CookieSession);
                Cookies.Add(CookieToken);
                string result2 = Post(Url, wiki, String.Format("action=login&lgname={0}&lgpassword={1}&lgtoken={2}&format=xml", bot, pass, token), Cookies);

Gracias de antemano por sus respuestas :D

Spiritdead5

#1
if (cookie != null)
                  {
                      request.CookieContainer = new CookieContainer();
                      request.CookieContainer.Add(wiki, cookie);

                  }

aca esta mal

estas seteando en el cookiecontainer una instancia vacia sin cookies, debes crearla primero,llenarla y despues es que seteas el Request.CookieContainer

es mi consejo

PD: ahora q me doy cuenta estas diciendo si cookie != null (osea el contenedor es null) añades al cookiecontainer otro contenedor ? xD echale 1 ojo a esa parte de las cookies