2010-03-03 40 views
7

Tôi đang cố đăng nhập vào diễn đàn vbulletin. Tôi đã nhận được điều này:Cách đăng nhập vào diễn đàn vbulletin bằng 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(); 
} 

Có vẻ như tôi đang đăng nhập, nhưng khi tôi tải xuống trang, tôi không thể tìm thấy tên người dùng của mình trong đó.

Các bạn có thấy điều gì mà tôi có thể làm sai không?

Cảm ơn trước!

Trả lời

1

Tôi không chắc chắn nếu tôi theo dõi bạn. Bạn có ý nghĩa gì với VBB?

Nếu bạn muốn đăng chuỗi trong vb.com, tôi có thể cho bạn biết rằng có một chuỗi được mở trong vb.org trong diễn đàn 'thảo luận lập trình vb3' (không được đăng bởi tôi). Nó sẽ ở trên trang thứ 3, bắt đầu bằng 'C#'.

Nếu bạn có ý nghĩa gì đó khác với bài đăng của mình, bạn có thể làm rõ một chút không?

+1

Nếu bạn muốn trả lời một câu trả lời, bạn nên sử dụng liên kết "thêm lời bình" bên dưới bình luận rằng, hơn là gửi một trả lời bình luận của bạn. –

6

Bạn có thể làm điều đó bằng HTTP Request

Sử dụng phương pháp này

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

Bạn có thể nhận được dữ liệu bài đăng bằng cách đọc http Tiêu đề –

+1

Bạn đặt tên người dùng và mật khẩu ở đâu? – Yustme

Các vấn đề liên quan