2010-03-03 18 views
7

Estoy intentando iniciar sesión en un foro de vbulletin. Tengo este momento:¿Cómo iniciar sesión en un foro de vbulletin con C#?

private string login(string url, string username, string password) 
{ 
string values = "vb_login_username={0}&vb_login_password={1}" 
values += "&securitytoken=guest&cookieuser=checked&do=login"; 

values = string.Format(values, username, password); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
CookieContainer a = new CookieContainer(); 
req.CookieContainer = a; 

System.Net.ServicePointManager.Expect100Continue = false; // prevents 417 error 

using (StreamWriter writer = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII)) 
{ writer.Write(values); } 

this.response = (HttpWebResponse)req.GetResponse(); 

StringBuilder output = new StringBuilder(); 

foreach (var cookie in response.Cookies) 
{ 
output.Append(cookie.ToString()); 
output.Append(";"); 
} 


return output.ToString(); 
} 

Parece que estoy consiguiendo cerrar sesión, pero al descargar la página, no puedo encontrar mi nombre de usuario en el mismo.

¿Vieron algo que podría estar haciendo mal?

¡Gracias de antemano!

Respuesta

1

No estoy seguro de si te sigo. ¿Qué quieres decir con VBB?

Si quiere decir publicar un hilo en vb.com, puedo decirle que hay un hilo abierto en vb.org en el foro 'vb3 programming discussion' (no publicado por mí). Debería estar en la 3ª página, comienza con 'C#'.

Si quiere decir algo más con su publicación, ¿puede aclararlo un poco?

+1

Si desea responder a una respuesta, se debe utilizar el enlace "Añadir comentario" debajo de ese comentario, en lugar de publicar una responde a tu propio comentario –

6

Puede hacerlo utilizando HTTP Request

Utilice este método

public string Login(Uri ActionUrl, string postData) 
     { 

      gRequest = (HttpWebRequest)WebRequest.Create(formActionUrl); 
      gRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 GTBDFff GTB7.0"; 

      gRequest.CookieContainer = new CookieContainer(); 
      gRequest.Method = "POST"; 
      gRequest.Accept = " text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8, */*"; 
      gRequest.KeepAlive = true; 
      gRequest.ContentType = @"application/x-www-form-urlencoded"; 


      #region CookieManagement 
      if (this.gCookies != null && this.gCookies.Count > 0) 
      { 

       gRequest.CookieContainer.Add(gCookies); 
      } 


      try 
      { 

       string postdata = string.Format(postData); 
       byte[] postBuffer = System.Text.Encoding.GetEncoding(1252).GetBytes(postData); 
       gRequest.ContentLength = postBuffer.Length; 
       Stream postDataStream = gRequest.GetRequestStream(); 
       postDataStream.Write(postBuffer, 0, postBuffer.Length); 
       postDataStream.Close(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 

      } 



      try 
      { 
       gResponse = (HttpWebResponse)gRequest.GetResponse(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex); 

      } 



      //check if the status code is http 200 or http ok 

       if (gResponse.StatusCode == HttpStatusCode.OK) 
       { 
        //get all the cookies from the current request and add them to the response object cookies 

        gResponse.Cookies = gRequest.CookieContainer.GetCookies(gRequest.RequestUri); 
        //check if response object has any cookies or not 
        if (gResponse.Cookies.Count > 0) 
        { 
         //check if this is the first request/response, if this is the response of first request gCookies 
         //will be null 
         if (this.gCookies == null) 
         { 
          gCookies = gResponse.Cookies; 
         } 
         else 
         { 
          foreach (Cookie oRespCookie in gResponse.Cookies) 
          { 
           bool bMatch = false; 
           foreach (Cookie oReqCookie in this.gCookies) 
           { 
            if (oReqCookie.Name == oRespCookie.Name) 
            { 
             oReqCookie.Value = oRespCookie.Name; 
             bMatch = true; 
             break; // 
            } 
           } 
           if (!bMatch) 
            this.gCookies.Add(oRespCookie); 
          } 
         } 
        } 
      #endregion 



        StreamReader reader = new StreamReader(gResponse.GetResponseStream()); 
        string responseString = reader.ReadToEnd(); 
        reader.Close(); 
        //Console.Write("Response String:" + responseString); 
        return responseString; 
       } 
       else 
       { 
        return "Error in posting data"; 
       } 

     } 
+0

Puede obtener datos posteriores leyendo http Encabezados –

+1

¿Dónde se establece el nombre de usuario y la contraseña? – Yustme

Cuestiones relacionadas