2010-05-09 66 views
5

Tôi đang cố gắng đăng nhập vào trang web Rage TV và nhận mã nguồn của trang Chương trình của tôi. Tôi đăng nhập thành công (Tôi đã kiểm tra phản hồi từ yêu cầu đăng bài của mình) nhưng sau đó khi tôi cố thực hiện yêu cầu nhận trên trang Chương trình của tôi, tôi được chuyển hướng đến trang đăng nhập.Đăng nhập vào trang web và sử dụng cookie để lấy nguồn cho một trang khác

Đây là mã tôi đang sử dụng để đăng nhập:

private string LoginToTvRage() 
    { 
     string loginUrl = "http://www.tvrage.com/login.php"; 
     string formParams = string.Format("login_name={0}&login_pass={1}", "xxx", "xxxx"); 
     string cookieHeader; 
     WebRequest req = WebRequest.Create(loginUrl); 
     req.ContentType = "application/x-www-form-urlencoded"; 
     req.Method = "POST"; 
     byte[] bytes = Encoding.ASCII.GetBytes(formParams); 
     req.ContentLength = bytes.Length; 
     using (Stream os = req.GetRequestStream()) 
     { 
      os.Write(bytes, 0, bytes.Length); 
     } 
     WebResponse resp = req.GetResponse(); 
     cookieHeader = resp.Headers["Set-cookie"]; 
     String responseStream; 
     using (StreamReader sr = new StreamReader(resp.GetResponseStream())) 
     { 
      responseStream = sr.ReadToEnd(); 
     } 
     return cookieHeader; 
    } 

sau đó tôi vượt qua cookieHeader vào phương pháp này cần được nhận nguồn gốc của tôi cho thấy page:

private string GetSourceForMyShowsPage(string cookieHeader) 
    { 
     string pageSource; 
     string getUrl = "http://www.tvrage.com/mytvrage.php?page=myshows"; 
     WebRequest getRequest = WebRequest.Create(getUrl); 
     getRequest.Headers.Add("Cookie", cookieHeader); 
     WebResponse getResponse = getRequest.GetResponse(); 
     using (StreamReader sr = new StreamReader(getResponse.GetResponseStream())) 
     { 
      pageSource = sr.ReadToEnd(); 
     } 
     return pageSource; 
    } 

Tôi có đang sử dụng this previous question làm hướng dẫn nhưng tôi không biết tại sao mã của tôi không hoạt động.

Trả lời

17

Dưới đây là một phiên bản đơn giản và làm việc của mã của bạn sử dụng một WebClient:

class Program 
{ 
    static void Main() 
    { 
     var shows = GetSourceForMyShowsPage(); 
     Console.WriteLine(shows); 
    } 

    static string GetSourceForMyShowsPage() 
    { 
     using (var client = new WebClientEx()) 
     { 
      var values = new NameValueCollection 
      { 
       { "login_name", "xxx" }, 
       { "login_pass", "xxxx" }, 
      }; 
      // Authenticate 
      client.UploadValues("http://www.tvrage.com/login.php", values); 
      // Download desired page 
      return client.DownloadString("http://www.tvrage.com/mytvrage.php?page=myshows"); 
     } 
    } 
} 

/// <summary> 
/// A custom WebClient featuring a cookie container 
/// </summary> 

public class WebClientEx : WebClient 
{ 
    public CookieContainer CookieContainer { get; private set; } 

    public WebClientEx() 
    { 
     CookieContainer = new CookieContainer(); 
    } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     var request = base.GetWebRequest(address); 
     if (request is HttpWebRequest) 
     { 
      (request as HttpWebRequest).CookieContainer = CookieContainer; 
     } 
     return request; 
    } 
} 
+0

này là hoàn hảo! Cảm ơn nhiều! – Stu

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