HtmlAgilityPack을 사용할 때 패스워드를 보내는 법

c# html-agility-pack web-scraping

문제

웹 사이트의 XML 파일을 읽으려고하는데 HtmlAgilityPack을 사용하고 있습니다. 이것은 내가 사용하고있는 코드입니다 :

HtmlWeb web = new HtmlWeb( ) ;
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument( ) ;
doc = web.Load( "http://example.com/index.asp"  ) ;

페이지는 그들이 제공 한 암호를 묻습니다. 그러나이 페이지의 XML 링크를 읽을 index.asp 페이지로 이동하기 위해 암호를 전달하는 방법을 모르겠습니다.

example.com/index.asp는 다음과 같습니다.

 <form action="index.asp" method="post">
 <table>
     <tbody>
         <tr>
            <td>
                <input type="Text" name="password" value="" size="20"> 
            </td>
         </tr>
     </tbody>
 </table>
</form

HtmlAgilityPack에서이 페이지의 비밀번호를 어떻게 전달합니까? 여기서 'HtmlWeb.PreRequest'를 사용하는 예제를 보았지만 프로세스에 대해 너무 많이 이해하지는 못합니다. HtmlWeb.Load에는 7 개의 오버로드가 있지만 암호를 저장하는 변수를 어디에 두어야하는지 알지 못합니다.

doc = web.Load( "http://example.com/index.asp", "passwordVariable" ) ;

누군가 제가 연구에 대한 올바른 길로 나를 안내 할 수 있다면 정말 감사 할 것입니다.

고맙습니다

수락 된 답변

나는 당신이 찾고있는 것이이 페이지를 게시하고 보호 된 다른 페이지에 액세스하려고 시도하는 것이라고 생각합니다. 웹 페이지의 보안은 극적으로 다양하며 소유자는 이러한 프로그래밍 방식 액세스를 방지하기 위해 적극적으로 노력할 것입니다.

쿠키를 사용하는 단순한 보안 사이트의 경우 로그인 페이지를 요청하고 필요한 자격 증명 (필요한 숨겨진 필드)이있는 POST를 수행하여 브라우저에서 수행 한 작업을 모방 할 수 있습니다. 당신이 제공하는 쿠키로 방문하고 싶은 페이지.

    private HttpWebRequest CreateRequest(string url, string method)
    {
        var request = (HttpWebRequest)WebRequest.Create(url);
        request.Referer = Host;
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36";
        request.Method = method;
        request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";

        return request;
    }

    public void Login()
    {
        byte[] bytes;
        string data;
        var SharedCookie = new CookieContainer();

        var url = "index.asp";

        try
        {
            //Start Session
            var request = CreateRequest(url, "GET");
            request.CookieContainer = SharedCookie;

            using (var tmpResponse = request.GetResponse())
            {
                //WriteResponse(tmpResponse);
                tmpResponse.Close();
            }

            //Login
            data = "password=123456";
            bytes = Encoding.UTF8.GetBytes(data);

            request = CreateRequest(url, "POST");
            request.CookieContainer = SharedCookie;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(bytes, 0, bytes.Length);
            }

            using (var tmpResponse = request.GetResponse())
            {
                //WriteResponse(tmpResponse);
                tmpResponse.Close();
            }
            IsLoggedIn = true;
        }
        catch (System.Net.WebException ex)
        {
            Console.WriteLine("Web Error:" + ex.Status);
            Console.WriteLine("Url:" + url);
            Console.WriteLine(ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Url:" + url);
            Console.WriteLine(ex.Message);
        }
    }


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.