Frage

Ich bin ein Kerl Systeme und zur Zeit eine Teilzeit Web-Entwicklung Projekt so ist ziemlich neu, um es zu tun. Ich versuche, ein HTTP-Client für www.portapower.com zu schreiben.

Es wird für bestimmte Gegenstände, die auf der Website veröffentlicht werden, und wenn sie eine bestimmte Anforderung entsprechen, werden sie eine Nachricht drucken.

Beim Versuch, auf diese Seite zuzugreifen:

http://www.portapower.com /getbainfo.php?fclasscode=1&code=CB1831B.40H&fbrand=QUNFUg==

Die Website leitet mich auf eine Standardregisterseite:

http://www.portapower.com/defaregit.php

Hier ist ein Ausschnitt von dem, was ich codierte:

CookieContainer myContainer = new CookieContainer();

HttpWebRequest request = (HttpWebRequest)
WebRequest.Create("http://www.portapower.com/" + urlpart);
request.Credentials = new NetworkCredential("****", "******");
request.CookieContainer = myContainer;
request.PreAuthenticate = true;
request.Method = "POST";
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();

Console.WriteLine(response.StatusCode);
Stream resStream = response.GetResponseStream();
Console.WriteLine(resStream.ToString());

Ich habe tun Sie den Benutzernamen und Passwort ein und es funktioniert gut, wenn von einem Browser verwendet. Bitte sagen Sie mir, ob dies ein richtiger Weg, um eine authentifizierte Seite zuzugreifen.

War es hilfreich?

Lösung

Es hängt davon ab, wie die Website-Benutzer authentifiziert. Wenn sie die Standardauthentifizierung oder Windows-Authentifizierung verwenden, dann können Sie die Credentials Eigenschaft der HttpWebRequest Klasse der Benutzername / Passwort / Domain-Informationen und es sollte funktionieren.

Doch es klingt wie Sie den Benutzernamen / Passwort auf der Website eingeben müssen, was bedeutet, dass Sie zunächst auf die Website einzuloggen gehen zu müssen. Mit Blick auf der Haupt-Seite, ist es das, was ich in dem <form> Elemente finden, das Login Griff:

<form name="formlogin" method="post" action="./defalogin.php" >
  <input name="emtext" type="text" id="emtext" size="12">
  <input name="pstext" type="password" id="pstext" size="12">
  <input type="submit" name="Submit" value="Logn in" 
    onClick="return logincheck()" >
</form>

Ich habe nur die relevanten Teile enthalten.

Dieses Gegeben, müssen Sie zuerst mit dem ./defalogin.php und POST die HttpWebRequest und emtext Werte an die pstext Seite. Also, stellen Sie sicher, dass Sie setzen die CookieContainer Eigenschaft zu einer Instanz von CookieContainer . Wenn dieser Aufruf zurückkehrt POST, dann ist es mehr als wahrscheinlich, mit einem Cookie bevölkert zu gehen, das müssen Sie zurück an den Ort schicken. Nur halten die CookieContainer Eigenschaft auf alle nachfolgenden HttpWebRequest Instanzen dieser CookieContainer Einstellung sicherstellen, dass die Cookies herumgereicht werden.

Dann würden Sie auf der Seite in der Verbindung angegeben.

Von Interesse ist auch die logincheck JavaScript-Funktion, sondern an den Skript-Quellen suchen, tut es nichts Bemerkenswertes.

Andere Tipps

Die Anmeldeinformationen, die Sie vorbei ist für Windows-Authentifizierung. Sie müssen Post-Daten mit Daten vorlegen, die die Einreichung eines Formulars CapTrue den Session-Cookie Satz in der Antwort dann ahmen am das Cookie für zukünftige Anfragen verwenden

Werfen Sie einen Blick auf diese Antwort, die den Code hat, dies zu tun:

Anmeldung auf der Seite mit HttpWebRequest

Sie können es auf diese Weise nicht tun; die Anmeldeinformationen sind vorbei Sie können mit einem grundlegenden Authentifizierungsschema verwendet werden (dh wenn im Browser, erhalten Sie einen Benutzernamen / Passwort-Dialog Aufspringen.) Sie werden die Eingabe der Daten in dieser Form und fangen simulieren müssen die anmelden Cookie und verwendet diesen.

Die NetworkCredential Klasse ist wirklich zum Steuern regelmäßige Windows-Anmeldeinformationen (NTLM, Kerberos, etc).

Diese Stelle ist eine PHP-Seite auf Apache laufen, so dass ich glaube nicht, dass sie NTLM oder Kerberos verwenden.

Was möchten Sie tun ist, um einige Formularfelder auf der Website zu veröffentlichen, dann halten Sie die Cookie Sie wieder zu bekommen. Stellen Sie sicher, auf nachfolgende Anfragen Sie das Cookie zurück an den Ort schieben, damit es weiß, Sie bereits angemeldet haben.

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