Bạn cần tuân thủ yêu cầu POST qua trình duyệt và xem cấu trúc được cấu trúc như thế nào. Ví dụ: :
{"userName":"you","password":"pwd"}
Thông thường, một trang web sẽ nhận ra rằng bạn đã đăng nhập bằng cách nhận cookie theo yêu cầu của bạn.
HttpClient theo mặc định sẽ gửi cookie nhận được từ một tên miền cụ thể với mỗi yêu cầu tuần tự đến tên miền đó (Cho đến khi bạn vứt bỏ mà HttpClient dụ)
1) Tạo vùng chứa cookie và giao nó để dụ HttpClient của bạn.
2) Sử dụng HttpClient để thực hiện yêu cầu POST đăng nhập.
3) Sử dụng HttpClient để thực hiện yêu cầu GET dữ liệu.
4) Đọc chuỗi html từ câu trả lời.
5) Sử dụng HtmlAgilityPack HtmlDocument để tải tài liệu từ chuỗi html chứ không phải từ web (như hầu hết các ví dụ hiển thị).
string baseUrl = "https://www.yourwebsite.com";
string loginUrl = "/Account/LogOn";
string sessionUrl = "/Data";
var uri = new Uri(baseUrl);
CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
using (var client = new HttpClient(handler))
{
client.BaseAddress = uri;
var request = new { userName = "you", password = "pwd" };
var resLogin = client.PostAsJsonAsync(loginUrl,request).Result;
if (resLogin.StatusCode != HttpStatusCode.OK)
Console.WriteLine("Could not login -> StatusCode = " + resLogin.StatusCode);
// see what cookies are returned
IEnumerable<Cookie> responseCookies = cookies.GetCookies(uri).Cast<Cookie>();
foreach (Cookie cookie in responseCookies)
Console.WriteLine(cookie.Name + ": " + cookie.Value);
var resData = client.GetAsync(dataUrl).Result;
if(resSession.StatusCode != HttpStatusCode.OK)
Console.WriteLine("Could not get data html -> StatusCode = " + resSession.StatusCode);
var html = resSession.Content.ReadAsStringAsync().Result;
var doc = new HtmlDocument();
doc.LoadHtml(html);
}
Nguồn
2017-08-24 18:19:17
Cảm ơn sự giúp đỡ của bạn. tôi đã xem nhưng tôi chắc chắn cần sử dụng HTMLAgilityPack do mã nguồn lạ của trang web tôi đang đăng nhập vào. Tôi đã làm điều gì đó dobut i am một chút bị mắc kẹt sau đó: Tôi đăng nhập thông qua teh webbrowser1 controla nd sau đó lấy cookie cho phiên đó. Tôi có thể áp dụng cookie đó và mở một trang bằng cách sử dụng cookie đó bằng cách sử dụng HTMLAgilityPack không? – touyets
@ user1842134 - Không, HAP không và không thể xử lý cookie. – Oded
ok cảm ơn bạn rất nhiều – touyets