2

问题

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

细节

我正在尝试获取此 URL 引用的页面的 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 上查看源代码)粘贴到 notepad++ 上。

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

webrequest 的计数为 17,而浏览器的计数为 14。

此外,每个页面的“课程”都不同:网络请求课程是“Faculdade de Ciências Farmacêuticas”,而浏览器上的课程是“Faculdade de Economia, Administração e Contabilidade”(这些名称是葡萄牙语)。

TL:博士

不知道为什么,get on this link :https://uspdigital.usp.br/jupiterweb/listarGradeCurricular?codcg=12&codcur=12012&codhab=1&tipo=N与我复制粘贴到浏览器时的结果相比,在 webrequest c# 中给了我一个不同的页面。

更新

  1. 我试图比较两个请求中的用户代理,它们匹配。

  2. 我发现通过 C# 的 Web 请求总是给我相同的页面,即“Faculdade de Ciências Farmacêuticas”课程的页面

我猜这与HTTPS有关。

在此先感谢,很抱歉发了这么长的帖子

4

2 回答 2

4

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

更新

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

于 2012-07-09T14:53:33.333 回答
0

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

于 2012-07-09T17:22:18.020 回答