Hallo zusammen,
ich möchte gern Daten von einer Website extrahieren, diese sind aber erst sichtbar, wenn man sich via login authorisiert. Dann sind die entsprechenden Daten anwählbar.
Jetzt meine Frage, wie kann ich auf eine Flash-Website mich zuerst mit meinem Account/Login anmelden, um dann Daten abzurufen! Mit dem HttpWebRequest bzw. WebRequest habe ich es nicht hin bekommen. Daher die Uri die ich setze, wird nicht korrekt ausgelöst, sondern nur die startseite zurück gegeben da ich mich nicht authorisiert habe.
Again what learned...
Ich poste mal ein bisschen code, vielleicht seht ihr ja was ich falsch mache.
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(@"https://www.domain.com/file.html"));
CredentialCache credCache = new CredentialCache();
NetworkCredential creds = new NetworkCredential("username", "password");
credCache.Add(@"https://www.domain.com", 80, "Basic", creds);
webRequest.Credentials = credCache.GetCredential(@"https:/www.domain.com", 80, "Basic");
webRequest.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;
webRequest.PreAuthenticate = true;
WebResponse webResponse = webRequest.GetResponse();
StreamReader stream = new StreamReader(webResponse.GetResponseStream());
HtmlDocument document = new HtmlDocument();
document.Load(stream);
Again what learned...
Du hast also eine Flash-Webseite(?) D.h., die Daten, die du auslesen willst, sind nicht im HTML-Format? Die Authentifizierung geschieht auch nicht über HTML-Post und Cookies(?)
Das in der Uri ein Doppelslash fehlt ist nur ein Schreibfehler beim Pseudocode?
Hallo dN!3L,
Du hast also eine Flash-Webseite(?)
Nicht direkt, also einige Sachen der Seite sind in Html codiert, diese sind auch wichtig für mich.
Die Authentifizierung geschieht auch nicht über HTML-Post und Cookies(?)
Ich vermute schon, bin mir dabei aber nicht ganz sicher, der Login Java script lautet jedenfalls wie folgt.
<div id="login">
<form id="signinform" action="https://www.xmzDomain.com/login/" method="post">
<input type="text" name="username" /><label>Benutzername:</label><br />
<input type="password" name="password" /><label>Passwort:</label><br />
button style="float: right; margin-right: 10px; margin-top: 12px;" id="signin">Anmelden</button>
Das in der Uri ein Doppelslash fehlt ist nur ein Schreibfehler beim Pseudocode?
Ja das ist nur ein Schreibfehler. Was ich auch schon versucht habe, aber nicht funktioniert hat ist folgendes.
WebClient client = new WebClient();
client.Headers.Add("Content-Type", "text/html");
client.UploadData(
"https://www.xmzDomain.com/login/",
"post",
Encoding.UTF8.GetBytes("username=<username>&password=<password>"));
client.Headers.Clear();
client.Headers.Add("Content-Type", "text/html");
client.Headers.Add("Cookie", client.ResponseHeaders["Set-Cookie"]);
byte[] response = client.DownloadData("https://www.xmzDomain.com/Infomations/12345");
Console.WriteLine(Encoding.ASCII.GetString(response));
Leider wird hier auch nur die Home Seite zurück gegeben und nicht die eigentliche die hinter dem Link verborgen ist (wenn man sich normal mit dem Browser autorisiert.) Was jedoch interessant ist das hinter dem ResponseHeader bei Set-Cookie wirklich etwas steht. Funktionieren tut es trotzdem nicht.
Again what learned...
der Login Java script lautet jedenfalls wie folgt.
<form id="signinform" action="https://www.xmzDomain.com/login/" method="post">
Das ist doch ganz normales HTML - kein JavaScript. Also doch ein ganz stinknormales HTTP-Post (siehe das "method"-Attribut).
Dann dürfte dafür der WebClient mit HTTP-POST- und Cookie-Unterstützung reichen:
ExtendedWebClient extendedWebClient = new ExtendedWebClient();
extendedWebClient.Post("https://www.xmzDomain.com/login/",new
{
username = "carnivore",
password = "secret_password"
});
string content = extendedWebClient.DownloadString("https://www.xmzDomain.com/Infomations/12345");[/csharp]
Gruß,
dN!3L
Das ist doch ganz normales HTML - kein JavaScript.
Das ist natürlich korrekt, das was ich gepostet habe ist reines Html, aber unter anderem war auch JavaScript enthalten.
Mit deinem Extended Web Client funzt es hervorangend. Kann man sich dann auch wieder abmelden? Sorry für die blöden Fragen bin nicht so bewandert in der Materie.
Danke auf jedenfall erst einmal für deine Hilfe!
Again what learned...
Kann man sich dann auch wieder abmelden?
Dann musst du gucken, was auf der Seite getan wird, im dich abzumelden. Sicherlich auch wieder ein Post mit bestimmten Parametern an einen bestimmten URI.