using var handler = new HttpClientHandler
{
    UseProxy = true,
    Proxy = new WebProxy("http://proxy.example:8080")
};
using var client = new HttpClient(handler);

string html = await client.GetStringAsync(
    "https://www.example.com/catalog");
var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(html);

Đoạn .NET hiện đại này dùng System.Net và System.Net.Http. Máy khách đã cấu hình xử lý định tuyến mạng, và Html Agility Pack nhận chuỗi HTML trả về. Hãy giữ một máy khách được cấu hình phù hợp cho công việc liên tục thay vì dựng lại các nhóm của nó cho mỗi trang.

Với ví dụ trang công khai này, một ứng viên chưa xác thực từ danh sách proxy HTTP có thể thay thế bên trung gian. Thay đích đến riêng. URL trang web giữ nguyên danh tính TLS của nó. Thông tin đăng nhập proxy đã xác thực thuộc về WebProxy; cả thông tin đăng nhập của trang web lẫn xác minh bị vô hiệu hóa đều không thay thế chúng.

GetStringAsync coi các trạng thái HTTP không thành công là lỗi. Đừng chuyển một lần tải xuống thất bại thành HtmlDocument rỗng. Nếu ứng dụng cần tiêu đề, chi tiết trạng thái hoặc nội dung lỗi, hãy dùng thao tác HTTP hướng phản hồi và kiểm tra nó trước khi phân tích.

Phương thức chuỗi tránh việc chuyển đổi UTF-8 bổ sung vô điều kiện đối với byte thô. Nếu bạn cố ý lấy byte, hãy mang các yêu cầu về mã hóa của phản hồi và tài liệu vào bước giải mã.

LoadHtml tạo ra tài liệu đã phân tích; nó không thực thi script, không tải kiểu và không theo liên kết. Hãy phân giải các liên kết tương đối tiếp theo dựa trên vị trí của phản hồi, và nhớ rằng các phần tử do trình duyệt hiển thị có thể không có trong nguồn đã tải xuống. Mỗi phản hồi nên tạo tài liệu riêng của nó ngay cả khi các yêu cầu dùng chung một máy khách HTTP đã cấu hình.

Bài viết liên quan