Question

J'ai créé ce code pour vous connecter, pour récupérer et afficher une page Web:

  // 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();

Mais après la connexion, la page suivante est une redirection HTML telle que:

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

Comment suivre ce lien et récupérer la page suivante?

Était-ce utile?

La solution 2

J'ai trouvé le temps de le terminer, voici la réponse (j'ai essayé d'être aussi clair que possible):

        // 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();

Autres conseils

Envoyez simplement un nouveau WebRequest au fichier bb.php. Assurez-vous que vous utilisez le même CookieContainer puisque je présume que login.php utilise des sessions basées sur des cookies pour se souvenir de vous. Consultez la propriété HttpWebRequest.CookieContainer . Pour cela, vous devez convertir votre requête WebRequest en une requête HttpWebRequest.

Ajouté: (impossible d'écrire un exemple de code dans le commentaire.)

Je suis en train de créer du code sans correction en ce moment ...

var cookies = new CookieContainer(); 

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

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

Il existe une propriété de HttpWebRequest appelée AllowAutoRedirects . Définissez ceci sur true. Il existe également une propriété appelée MaximumAutomaticRedirections . Définissez cette valeur sur une valeur autorisée pour vous assurer qu’elles sont toutes suivies.

Vous ne pouvez pas le faire facilement, car la balise méta est lue par le client et exécutée.

Dans ce cas, lorsque vous utilisez HttpWebRequest, la requête ne tient pas compte des fonctions que le texte peut avoir.

Vous devez donc effectuer une autre requête sur la page dans l'attribut URL (bb.php).

-

Si le serveur effectuait la redirection, le problème serait résolu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top