2010-03-03 4 views
7

J'essaie de me connecter à un forum vbulletin. Je suis arrivé jusqu'ici:Comment se connecter sur un forum vbulletin avec 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(); 
} 

On dirait que je suis se connecté, mais quand je télécharger la page, je ne peux pas trouver mon nom d'utilisateur en elle.

Est-ce que vous voyez quelque chose que je pourrais mal faire?

Merci d'avance!

Répondre

1

Je ne suis pas sûre de vous suivre. Que voulez-vous dire par VBB?

Si vous voulez publier un fil de discussion sur vb.com, je peux vous dire qu'il y a un fil de discussion ouvert dans vb.org dans le forum 'discussion de programmation vb3' (non publié par moi). Il devrait être sur la 3ème page, commence par 'C#'.

Si vous voulez dire quelque chose d'autre avec votre message, pouvez-vous le clarifier un peu?

+1

Si vous souhaitez répondre à une réponse, vous devez utiliser le lien « ajouter un commentaire » sous ce commentaire, plutôt que de poster un répondez à votre propre commentaire. –

6

Vous pouvez le faire en utilisant HTTP Request

Utilisez cette méthode

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

Vous pouvez obtenir postData en lisant les entêtes http –

+1

Où définissez-vous le nom d'utilisateur et mot de passe? – Yustme

Questions connexes