Laden...

Daten einer Https-Website via Login abrufen

Erstellt von rollerfreak2 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.120 Views
rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 13 Jahren
Daten einer Https-Website via Login abrufen

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...

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 13 Jahren

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...

2.891 Beiträge seit 2004
vor 13 Jahren

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?

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 13 Jahren

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...

2.891 Beiträge seit 2004
vor 13 Jahren

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

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 13 Jahren

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...

2.891 Beiträge seit 2004
vor 13 Jahren

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.

rollerfreak2 Themenstarter:in
916 Beiträge seit 2008
vor 13 Jahren

Danke dN!3L, habs hinbekommen.

Again what learned...