2 votes

WebRequest récupère un HTML différent de celui du navigateur.

Problème

La page html récupérée par ma requête web c# est différente de celle que j'obtiens en utilisant le navigateur.

Détails

J'essaie d'obtenir le code HTML de la page référencée par cette URL :

https://sistemas.usp.br/jupiterweb/listarGradeCurricular?codcg=12&codcur=12012&codhab=1&tipo=N

Le code que j'utilise pour le WebRequest est le suivant :

public string HttpsGet (string url)
{
    string response = string.Empty;
    if (!string.IsNullOrEmpty(url))
    {
        HttpWebRequest WReq = (HttpWebRequest)WebRequest.Create("https://uspdigital.usp.br/jupiterweb/listarGradeCurricular?codcg=9&codcur=9012&codhab=100&tipo=N");
        WReq.Credentials = CredentialCache.DefaultCredentials;

        ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);

        try
        {
            WReq.Proxy = new WebProxy();
            WReq.Method = "GET";
            WReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.107 Safari/535.1";
            WReq.ServicePoint.ConnectionLimit = 800;
            WReq.Timeout = 80000;
            WReq.ContentType = "application/x-www-form-urlencoded";
            WReq.Referer = "";
            WReq.AllowAutoRedirect = true;

            HttpWebResponse resp = (HttpWebResponse)WReq.GetResponse();
            using (resp)
            {
                response = (new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding("ISO-8859-1"))).ReadToEnd();
            }
        }
        catch (Exception exception)
        {
            Exception ex = exception;
        }
        return response;
    }
    else
    {
        throw new Exception("URL is empty or null");
    }
}

Comment j'ai compris qu'ils étaient différents

J'ai collé à la fois le html récupéré du code et celui du navigateur (view source code on chrome) sur notepad++.

Après cela, j'ai réussi à "compter" (ctrl+f -> compter) cette chaîne "#CCCCCC", qui représente la couleur de fond de certaines lignes du tableau. la couleur de fond de certaines lignes du tableau.

La requête web me donne un nombre de 17 alors que le navigateur me donne un nombre de 14.

De même, le "Cours" de chaque page est différent : le cours de la requête web est "Faculdade de Ciências Farmacêuticas" alors que celui du navigateur est "Faculdade de Economia, Administração e Contabilidade" (ces noms sont en portugais).

TL:DR

Je ne sais pas pourquoi, mais j'ai trouvé ce lien : https://uspdigital.usp.br/jupiterweb/listarGradeCurricular?codcg=12&codcur=12012&codhab=1&tipo=N me donne une page différente dans le webrequest c# par rapport au résultat lorsque je le copie et le colle dans le navigateur.

Mises à jour

  1. J'ai essayé de comparer l'agent utilisateur des deux requêtes, et ils correspondent.

  2. Je me suis aperçu que la requête web via C#, me donne toujours la même page, qui est la page du cours "Faculdade de Ciências Farmacêuticas".

Je suppose qu'il y a quelque chose à faire avec le truc HTTPS.

Merci d'avance, et désolé pour ce long message.

4voto

Brian Warshaw Points 8806

Découvrez la chaîne de l'agent utilisateur de votre navigateur, puis définissez la chaîne de l'agent utilisateur de votre requête Web en conséquence. De nombreux sites proposent des variantes de contenu/markup/styles/scripts en fonction de l'UA.

UPDATE

Si vous utilisez une HttpWebRequest, vous pouvez définir l'UA par la propriété UserAgent.

0voto

Réglage de l'hôte sur uspdigital.usp.br et remplacer le mot "sistemas" par "uspdigital" dans l'url semble fonctionner pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X