Einloggen auf die Website, über C #
Ich bin relativ neu mit C#, und haben eine Anwendung, die liest Teile des source-code auf einer website. Das alles funktioniert, aber das problem ist, dass die Seite in Frage, muss der Benutzer angemeldet sein, um Zugriff auf diesen Quellcode. Was mein Programm benötigt eine Methode, um zunächst die Anmeldung der Benutzer in der website - nachdem dies getan ist, werde ich in der Lage, Zugriff auf und Lesen Sie den source-code.
Der website protokolliert werden muss, ist:
mmoinn.com/index.do?PageModule=UsersLogin
Ich gesucht habe für den ganzen Tag darüber, wie dies zu tun, und versucht, Beispiele, hatte aber bisher kein Glück.
Vielen Dank im Voraus
InformationsquelleAutor der Frage | 2009-05-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie weiterhin mit WebClient POST (anstelle von GET, das ist die HTTP-verb Sie gerade verwenden mit DownloadString), aber ich glaube, Sie finden es einfacher, mit zu arbeiten die (leicht) senken-level-Klassen WebRequest und WebResponse.
Besteht aus zwei teilen - der erste ist die post des login-Formulars, die zweite ist die Wiederherstellung der "Set-cookie" - header, und senden diese zurück an den server als "Cookie" zusammen mit Ihrer Anfrage BEKOMMEN. Der server verwendet dieses cookie, um Sie zu identifizieren, von nun an (vorausgesetzt, es ist über cookie-basierte Authentifizierung, die ich bin ziemlich zuversichtlich, es ist so, die Seite gibt eine Set-cookie-header, die beinhaltet, "PHPSESSID").
Buchung auf das login-Formular
Form Beiträge sind leicht zu simulieren, ist es nur ein Fall formatieren Sie Ihre post-Daten wie folgt:
Mithilfe von WebRequest und code habe ich angepasst, von Scott Hanselmanhier ist, wie Sie schreiben, Formulardaten, um Ihre login-Formular:
Hier ist ein Beispiel von, was Sie sollten, finden Sie in den Set-cookie-header für Ihre login-Formular:
Immer die Seite hinter dem login-Formular
Können Sie jetzt führen Sie den GET-request auf eine Seite, müssen Sie angemeldet sein.
EDIT:
Wenn Sie brauchen, um die Ergebnisse der ersten POST, die Sie wiederherstellen können die HTML-kehrte er mit:
Legen Sie diese direkt unterhalb
cookieHeader = resp.Headers["Set-cookie"];
und überprüfen Sie dann die Zeichenfolge statt in pageSource.InformationsquelleAutor der Antwort Matthew Brindley
Können Sie vereinfachen Dinge, die ganz ein bisschen durch erstellen einer Klasse, abgeleitet von WebClient, überschreiben seine GetWebRequest-Methode und einen CookieContainer-Objekt auf. Wenn Sie immer die gleichen CookieContainer-Instanz, dann cookie-management wird alles automatisch für Sie erledigt.
Aber der einzige Weg, um auf die HttpWebRequest, bevor es gesendet wird, ist die Vererbung von WebClient und überschreiben diese Methode.
InformationsquelleAutor der Antwort Josh
Matthäus Brindleydein code funktioniert sehr gut für einige website, die ich brauchte (mit Anmeldung), aber ich brauchte, um zu ändern, um
HttpWebRequest
undHttpWebResponse
sonst bekomme ich eine 404 Bad Request vom remote-server. Auch ich möchte mein workaround mit dem code ist, dass ich versuchte, es zur Anmeldung für einen website basiert auf moodleaber es hat nicht funktioniert bei deinem Schritt "Immer die Seite hinter dem login-Formular" denn wenn erfolgreich POSTing login, Header'Set-Cookie'
nicht alles zurückzugeben, was trotz anderer websites übernimmt.Also ich denke, das, wo wir brauchen, um das speichern von cookies für die nächsten Anfragen, so dass ich fügte hinzu, diese.
Der "Buchung auf das login-Formular" code-block :
Und Zu den "Immer die Seite hinter dem login-Formular" :
Dies zu tun, lässt mich Log mich in und Holen Sie sich den Quelltext der "Seite nach login (website basiert moodle) ich weiß, das ist eine vage Verwendung des
CookieContainer
und HTTPCookies, da können wir zunächst Fragen, gibt es eine vorher gesetzte cookies gespeichert vor Absenden der Anfrage an den server. Dies funktioniert ohne problem sowieso, aber hier ist eine gute info darüber zu LesenWebRequest
undWebResponse
mit Beispiel-Projekten und-tutorial:Abrufen von HTTP-Inhalten .NET
How to use HttpWebRequest und HttpWebResponse .NET
InformationsquelleAutor der Antwort WhySoSerious
Können Sie immer die Watin web-test Rahmen.
InformationsquelleAutor der Antwort Magnus Johansson
Manchmal kann es helfen, das ausschalten
AllowAutoRedirect
und Einstellung sowohl loginPOST
und SeiteGET
Anfragen, die die gleiche Benutzer-agent.InformationsquelleAutor der Antwort TN.