Frage

Ich habe diesen Code getan um sich einzuloggen, abzurufen und zu einer Webseite zeigen:

  // login info array
        string postData = "user_name=tler";
        postData += "&user_password=lodvader";
        byte[] data = Encoding.ASCII.GetBytes(postData);

        // web request
        WebRequest req = WebRequest.Create("http://www.lol.com/login.php");
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        req.ContentLength = data.Length;

        // stream response to string
        Stream newStream = req.GetRequestStream();
        newStream.Write(data, 0, data.Length);
        newStream.Close();
        StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream(), Encoding.GetEncoding("iso-8859-1"));

        string responseString = reader.ReadToEnd();

        // retrieve text within title
        Regex rx = new Regex(@"(?<=<title>).+?(?=</title>)");

        var variable = rx.Matches(responseString);

        // output
        Console.WriteLine(variable[0]);

        Console.ReadLine();

Aber die folgende Seite nach der Anmeldung ist eine HTML-Redirect wie:

<meta http-equiv="refresh" content="3; URL="bb.php">

Wie Sie diesen Link folgen und nächste Seite abrufen?

War es hilfreich?

Lösung 2

Ich habe die Zeit zu beenden gefunden, hier die Antwort (ich versuchte, so klar wie möglich zu sein):

        // Cookie for our session
        var cookieContainer = new CookieContainer();

        // Encode post variables
        ASCIIEncoding encoding=new ASCIIEncoding();
        byte[] loginDataBytes = encoding.GetBytes("user_name=belaz&user_password=123");

        // Prepare our login HttpWebRequest
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://blabla.fr/verify.php");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.CookieContainer = cookieContainer;
        request.ContentLength = loginDataBytes.Length;

        // Write encoded post variable to the stream
        Stream newStream = request.GetRequestStream();
        newStream.Write(loginDataBytes, 0, loginDataBytes.Length);
        newStream.Close();

        // Retrieve HttpWebResponse
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        // Link the response cookie to the domain
        cookieContainer.Add(new Uri("http://blabla.fr/"),response.Cookies);

        // Prepare our navigate HttpWebRequest, and set his cookie.
        HttpWebRequest requestProfile = (HttpWebRequest)WebRequest.Create("http://blabla.fr/bb.php");
        requestProfile.CookieContainer = cookieContainer;

        // Retrieve HttpWebResponse
        HttpWebResponse responseProfile = (HttpWebResponse)requestProfile.GetResponse();

        // Retrieve stream response and read it to end
        Stream st = responseProfile.GetResponseStream();
        StreamReader sr = new StreamReader(st);
        string buffer = sr.ReadToEnd();

Andere Tipps

Sie einfach ein neues WebRequest zur bb.php Datei senden. Stellen Sie sicher, dass Sie die gleiche Cookie verwenden, da nehme ich an, dass login.php Cookie-basierte Sessions verwendet, um Sie zu erinnern. Schauen Sie sich die HttpWebRequest.CookieContainer Eigenschaft. Dies erfordert, dass Sie Ihre WebRequest zu einem HttpWebRequest werfen.

hinzugefügt: (. Kann nicht Beispielcode in dem Kommentar schreiben)

Ich mache nur Code, ohne jetzt Proofing ...

var cookies = new CookieContainer(); 

var firstReq = (HttpWebRequest)WebRequest.Create(".../login.php");
firstReq.CookieContainer = cookies;

var secondReq = (HttpWebRequest)WebRequest.Create(".../bb.php");
secondReq.CookieContainer = cookies

Es ist eine Eigenschaft von HttpWebRequest namens AllowAutoRedirects . Setzen Sie dies auf true. Auch gibt es eine Eigenschaft namens MaximumAutomaticRedirections . Festgelegt, dass bis zu einem gewissen zulässigen Wert um sicherzustellen, dass alle von ihnen befolgt werden.

Sie können ihm eine einfache Möglichkeit, dies nicht tun, da der Meta-Tag durch den Client gelesen und ausgeführt wird.

In diesem Fall, wenn Sie HttpWebRequest verwenden, wird die Anfrage über die Funktionen nicht kümmert der Text hat.

Sie müssen also eine weitere Anforderung an die Seite in der URL-Attribut tun (bb.php).

-

Wenn der Server die Umleitung täte, würde man nicht das Problem.

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