Bạn có thể tiếp tục sử dụng WebClient để ĐĂNG (thay vì GET, là động từ HTTP bạn hiện đang sử dụng với DownloadString), nhưng tôi nghĩ bạn sẽ thấy dễ dàng hơn khi làm việc với các lớp cấp thấp hơn (một chút) là WebRequest và WebResponse.
Điều này có hai phần - đầu tiên là đăng biểu mẫu đăng nhập, thứ hai là khôi phục tiêu đề "Set-cookie" và gửi tiêu đề đó trở lại máy chủ dưới dạng "Cookie" cùng với yêu cầu GET của bạn. Máy chủ sẽ sử dụng cookie này để nhận dạng bạn kể từ bây giờ (giả sử nó đang sử dụng xác thực dựa trên cookie mà tôi khá tin tưởng vì trang đó trả về tiêu đề Set-cookie bao gồm "PHPSESSID").
ĐĂNG lên biểu mẫu đăng nhập
Các bài đăng trên biểu mẫu rất dễ mô phỏng, đó chỉ là một trường hợp định dạng dữ liệu bài đăng của bạn như sau:
field1=value1&field2=value2
Sử dụng WebRequest và mã mà tôi đã điều chỉnh từ Scott Hanselman , đây là cách bạn ĐĂNG dữ liệu biểu mẫu lên biểu mẫu đăng nhập của mình:
string formUrl = "http://www.mmoinn.com/index.do?PageModule=UsersAction&Action=UsersLogin";
string formParams = string.Format("email_address={0}&password={1}", "your email", "your password");
string cookieHeader;
WebRequest req = WebRequest.Create(formUrl);
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"];
Đây là một ví dụ về những gì bạn sẽ thấy trong tiêu đề Set-cookie cho biểu mẫu đăng nhập của bạn:
PHPSESSID=c4812cffcf2c45e0357a5a93c137642e; path=/; domain=.mmoinn.com,wowmine_referer=directenter; path=/; domain=.mmoinn.com,lang=en; path=/;domain=.mmoinn.com,adt_usertype=other,adt_host=-
Lấy trang phía sau biểu mẫu đăng nhập
Bây giờ bạn có thể thực hiện yêu cầu GET của mình đến một trang mà bạn cần đăng nhập.
string pageSource;
string getUrl = "the url of the page behind the login";
WebRequest getRequest = WebRequest.Create(getUrl);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
BIÊN TẬP:
Nếu bạn cần xem kết quả của BÀI ĐĂNG đầu tiên, bạn có thể khôi phục HTML mà nó trả về bằng:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Đặt cái này ngay bên dưới cookieHeader = resp.Headers["Set-cookie"];
và sau đó kiểm tra chuỗi được giữ trong pageSource.