問題
私の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++に貼り付けました。
その後、いくつかのテーブル行の背景色を表すこの文字列「#CCCCCC」を「カウント」(ctrl + f->カウント)することができました。
webrequestのものは私に17のカウントを与え、browseroneは私に14のカウントを与えます。
また、各ページの「コース」は異なります。ウェブリクエストコースは「FaculdadedeCiênciasFarmacêuticas」ですが、ブラウザのコースは「Faculdade de Economia、AdministraçãoeContabilidade」です(これらの名前はポルトガル語です)。
TL:DR
理由はわかりません。このリンクにアクセスhttps://uspdigital.usp.br/jupiterweb/listarGradeCurricular?codcg=12&codcur=12012&codhab=1&tipo=N
すると、Webリクエストc#で、ブラウザにコピーして貼り付けたときの結果とは異なるページが表示されます。
更新
両方のリクエストのユーザーエージェントを比較しようとしましたが、一致しています。
C#を介したWebリクエストでは、常に同じページが表示されることがわかりました。これは、「FaculdadedeCiênciasFarmacêuticas」コースのページです。
HTTPSのことと関係があると思います。
よろしくお願いします。長い投稿でごめんなさい