Frage

Ich brauche einige Informationen von einer Website, die nicht mir gehört, um diese Informationen zu erhalten, die ich mir bei der Website anmelden muss, um die Informationen zu sammeln. Dies geschieht über ein HTML -Formular. Wie kann ich diese authentifizierte Bildschirme in C#machen?

Zusatzinformation:

  • Keksbasierte Authentifizierung.
  • Postaktion benötigt.
War es hilfreich?

Lösung

Sie würden die Anfrage stellen, als hätten Sie gerade das Formular ausgefüllt. Angenommen, es ist ein Beitrag beispielsweise, stellen Sie eine Postanforderung mit den richtigen Daten vor. Wenn Sie sich nun nicht direkt bei derselben Seite anmelden, die Sie kratzen möchten, müssen Sie alle Cookies nach Ihrer Anmeldeanforderung verfolgen und in Ihre Schablone einbeziehen, damit Sie angemeldet bleiben können.

Es könnte so aussehen:

HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
http.KeepAlive = true;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";
string postData="FormNameForUserId=" + strUserId + "&FormNameForPassword=" + strPassword;
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (Stream postStream = http.GetRequestStream())
{
    postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
// Probably want to inspect the http.Headers here first
http = WebRequest.Create(url2) as HttpWebRequest;
http.CookieContainer = new CookieContainer();
http.CookieContainer.Add(httpResponse.Cookies);
HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;

Vielleicht.

Andere Tipps

Sie können a verwenden Webbrowser Kontrolle. Füttern Sie sie einfach die URL der Website, verwenden Sie das DOM, um den Benutzernamen und das Passwort in die richtigen Felder zu setzen, und senden Sie schließlich einen Klick an die Schaltfläche Senden. Auf diese Weise interessieren Sie sich nichts anderes als die beiden Eingabefelder und die Taste Senden. Kein Cookie -Handling, keine rohe HTML -Parsen, kein HTTP -Schnüffeln - alles, was durch die Browser -Steuerung getan wird.

Wenn Sie so gehen, noch ein paar Vorschläge:

  1. Sie können verhindern, dass die Steuerung Add -Ins wie Flash lädt. Sie können Ihnen einige Zeit sparen.
  2. Sobald Sie sich angemeldet haben, können Sie alle Informationen erhalten, die Sie vom DOM benötigen - keine RAW -HTML analysieren.
  3. Wenn Sie das Tool noch tragbarer machen möchten, falls sich die Website in Zukunft ändert, können Sie Ihre explizite DOM -Manipulation durch eine Injektion von JavaScript ersetzen. Das JS kann aus einer externen Ressource erhalten werden und kann nach dem Namen der Fields -Bevölkerung und der Einreichung.

In einigen Fällen, httpResponse.Cookies wird leer sein. Verwenden Sie das CookieContainer stattdessen.

CookieContainer cc = new CookieContainer();

HttpWebRequest http = WebRequest.Create(url) as HttpWebRequest;
http.KeepAlive = true;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";

http.CookieContainer = cc;

string postData="FormNameForUserId=" + strUserId + "&FormNameForPassword=" + strPassword;
byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (Stream postStream = http.GetRequestStream())
{
    postStream.Write(dataBytes, 0, dataBytes.Length);
}
HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;
// Probably want to inspect the http.Headers here first
http = WebRequest.Create(url2) as HttpWebRequest;

http.CookieContainer = cc;

HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;

Als Ergänzung zur Antwort von Dlambin ist es notwendig zu haben

http.AllowAutoRedirect=false;

Andernfalls

HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse;

Es wird eine weitere Anfrage zur anfänglichen URL gestellt und Sie können URL2 nicht abrufen.

Sie müssen den httpwebRequest verwenden und einen Beitrag abhalten. Dieser Link sollte Ihnen helfen, loszulegen. Der Schlüssel ist, dass Sie sich die HTML -Form der Seite ansehen müssen, von der Sie versuchen, alle Parameter zu sehen, die das Formular benötigt, um den Beitrag zu senden.

http://www.netomatix.com/httppostdata.aspx

http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top