HtmlAgilityPack и аутентификация

c# html-agility-pack networkcredentials

Вопрос

У меня есть метод для получения идентификаторов и xpaths, если задан конкретный URL-адрес. Как передать имя пользователя и пароль с запросом, чтобы я мог очистить URL-адрес, требующий имя пользователя и пароль?

using HtmlAgilityPack;

_web = new HtmlWeb();

internal Dictionary<string, string> GetidsAndXPaths(string url)
{
    var webidsAndXPaths = new Dictionary<string, string>();
    var doc = _web.Load(url);
    var nodes = doc.DocumentNode.SelectNodes("//*[@id]");
    if (nodes == null) return webidsAndXPaths;
    // code to get all the xpaths and ids

Должен ли я использовать веб-запрос для получения источника страницы, а затем передать этот файл в метод выше?

var wc = new WebClient();
wc.Credentials = new NetworkCredential("UserName", "Password");
wc.DownloadFile("http://somewebsite.com/page.aspx", @"C:\localfile.html");

Принятый ответ

HtmlWeb.Load есть несколько перегрузок, они принимают либо экземпляр NetworkCredential либо вы можете напрямую передать имя пользователя и пароль.

Name // Description 
Public method Load(String) //Gets an HTML document from an Internet resource.  
Public method Load(String, String) //Loads an HTML document from an Internet resource.  
Public method Load(String, String, WebProxy, NetworkCredential) //Loads an HTML document from an Internet resource.  
Public method Load(String, String, Int32, String, String) //Loads an HTML document from an Internet resource. 

Вам не нужно передавать экземпляр WebProxy или вы можете передать его по умолчанию.

В качестве альтернативы вы можете HtmlWeb.PreRequest и настроить учетные данные для запроса.

htmlWeb.PreRequest += (request) => {
    request.Credentials = new NetworkCredential(...);
    return true;
};


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow