Wie übergebe ich ein Passwort, wenn ich HtmlAgilityPack benutze?

c# html-agility-pack web-scraping

Frage

Ich versuche, die XML-Dateien einer Website zu lesen, ich verwende HtmlAgilityPack. Dies ist der Code, den ich verwende:

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

Die Seite fragt nach einem Passwort, das sie mir gegeben haben, aber ich bin mir nicht sicher, wie ich das Passwort weitergeben soll, um zur index.asp-Seite zu gelangen, auf der ich die XML-Links der Seite lesen werde.

Das example.com/index.asp sieht folgendermaßen aus:

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

Wie gebe ich das Passwort von HtmlAgilityPack an diese Seite weiter? Ich sah ein Beispiel hier , dass ‚HtmlWeb.PreRequest‘ verwendet , aber ich verstehe nicht wirklich zu viel über den Prozess. Ich sehe, dass HtmlWeb.Load 7 Überladungen hat, aber ich weiß nicht, wohin ich meine Variable setzen soll, die das Kennwort enthält.

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

Wenn mich jemand auf den richtigen Weg zur Forschung führen könnte, würde ich das sehr schätzen.

Vielen Dank

Akzeptierte Antwort

Ich denke, was Sie suchen, ist, diese Seite zu veröffentlichen und versuchen Sie, auf eine andere Seite zuzugreifen, die geschützt ist. Die Sicherheit für Webseiten variiert dramatisch und der Eigentümer versucht möglicherweise aktiv, einen solchen programmatischen Zugriff zu verhindern.

Für eine einfache Sicherheits-Site, die Cookies verwendet, können Sie die Aktionen eines Browsers nachahmen, indem Sie die Login-Seite anfordern, einen POST mit den richtigen Zugangsdaten (und eventuell versteckten Feldern) erstellen und die erstellten Cookies erfassen Seite, die Sie mit den mitgelieferten Cookies besuchen möchten.

    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);
        }
    }


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum