2014-04-25 4 views
4

특정 URL이 주어지면 ids 및 xpaths를 가져 오는 메소드가 있습니다. 요청과 함께 사용자 이름과 암호를 전달하여 사용자 이름과 암호가 필요한 URL을 다룰 수 있도록하려면 어떻게해야합니까?HtmlAgilityPack 및 인증

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"); 
+0

나는 당신이 얻는 모든 오류를 먼저 붙여 넣을 것입니다. 둘째,'System.Net.Http.HttpClient'를 대신 사용해보십시오. 인증 세부 사항을 설정하는 방법이 더 명확하기 때문입니다. –

답변

2

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.PreRequestHandler을 연결하고 요청에 대한 자격 증명을 설정할 수 있습니다.

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