WebRequest是检索与浏览器不同的HTML

时间:2012-07-09 14:50:48

标签: c# html webrequest

问题

我的c#web请求检索到的html页面与我使用浏览器获取的页面不同。

详情

我正在尝试获取此网址引用的网页的HTML:

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

我用于WebRequest的代码就是这个:

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");
    }
}

我怎么知道他们是不同的

我在记事本++上粘贴了从代码中检索到的html和浏览器中的html(在chrome上查看源代码)。

之后,我设法“计数”(ctrl + f - > count)这个字符串“#CCCCCC”,代表 某些表行的背景颜色。

webrequest给我一个17的计数,而浏览器给我一个14的计数。

此外,每个页面的“课程”不同:webrequest课程是“FaculdadedeCiênciasFarmacêuticas”,而浏览器上的课程是“Faculdade de Economia,AdministraçãoeContabilidade”(这些名称是葡萄牙语)。

TL:DR

不知道为什么,获取此链接:https://uspdigital.usp.br/jupiterweb/listarGradeCurricular?codcg=12&codcur=12012&codhab=1&tipo=N在webrequest c#中为我提供了一个与我将其复制并粘贴到浏览器上的结果相比较的页面。

更新

  1. 我尝试比较两个请求中的用户代理,并且匹配。

  2. 我发现通过C#的网页请求总是给我一个页面,这是“FaculdadedeCiênciasFarmacêuticas”课程的页面

  3. 我猜这与HTTPS有关。

    提前致谢,对于长篇文章感到抱歉

2 个答案:

答案 0 :(得分:4)

找出浏览器的用户代理字符串,然后在WebRequest上设置用户代理字符串以匹配。许多网站基于UA提供变体内容/标记/样式/脚本。

<强>更新

如果您使用的是HttpWebRequest,则可以通过UserAgent属性设置UA。

答案 1 :(得分:0)

将主机设置为uspdigital.usp.br并将网址上的“sistemas”替换为“uspdigital”似乎对我有用。