Я хочу получить HTML с этого URL: https://store.steampowered.com/app/513710/SCUM/
Это должно быть легко, но я не смог этого сделать из-за ошибки SSL / TLS.
Поэтому я использовал код из этого вопроса: Запрос html через https с помощью c # Webclient
Наконец-то я мог заполнить свой StreamReader, но когда я пытаюсь использовать ReadToEnd () со строкой, я получаю поврежденную строку, что-то вроде этого: " "
Это должно быть что-то в кодировке символов, но если вы откроете: https://store.steampowered.com/app/513710/SCUM/
А затем откройте консоль браузера, в начале вы увидите:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
При указанном коде:
webClient.Headers["Accept-Charset"] = "ISO-8859-1,utf-8;q=0.7,*;q=0.7";
У вас есть utf-8, поэтому я просто не знаю, почему у меня такая проблема. Я пытался заменить:
StreamReader(webClient.OpenRead(steamURL));
С:
StreamReader(webClient.OpenRead(steamURL), Encoding.UTF8, true);
Но он все еще не получил правильный текст. Я попытался добавить всю информацию, что мог, если понадобится что-нибудь еще, я отредактирую вопрос.
Спасибо за потраченное время и хорошего дня.
С уважением,
David
PS: Это мой код прямо сейчас:
private StreamReader getStreamReader(string steamURL, WebClient webClient)
{
return new StreamReader(webClient.OpenRead(steamURL), Encoding.UTF8, true);
}
private void getSteamCosts()
{
// When I try to access an Steam HTML, SSL error appears
// We need an specific security protocol
// I check all, just in case
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(
delegate
{
return true;
});
using (WebClient webClient = new WebClient())
{
webClient.Headers["User-Agent"] = "Mozilla/5.0 (Windows;"
+ " U; Windows NT 6.0; en-US; rv:1.9.2.6) Gecko/20100625"
+ " Firefox/3.6.6 (.NET CLR 3.5.30729)";
webClient.Headers["Accept"] = "text/html,application/xhtml+"
+ "xml,application/xml;q=0.9,*/*;q=0.8";
webClient.Headers["Accept-Language"] = "en-us,en;q=0.5";
webClient.Headers["Accept-Encoding"] = "gzip,deflate";
webClient.Headers["Accept-Charset"] = "ISO-8859-1,utf-8;q=0.7,*;q=0.7";
StreamReader sr = null;
string steamURL = "https://store.steampowered.com/app/513710/SCUM/";
try
{
// This one should work
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
sr = getStreamReader(steamURL, webClient);
lbFinalSteam.Text = "TLS12Final";
}
catch (Exception) // Bad coding practice, just wanted it to work
{
// If that's not the case, I try the rest
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
sr = getStreamReader(steamURL, webClient);
lbFinalSteam.Text = "TLSFinal";
}
catch (Exception)
{
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
sr = getStreamReader(steamURL, webClient);
lbFinalSteam.Text = "SSL3Final";
}
catch (Exception)
{
try
{
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls11;
sr = getStreamReader(steamURL, webClient);
lbFinalSteam.Text = "TLS11Final";
}
catch (Exception)
{
lbFinalSteam.Text = "NoFinal";
}
}
}
}
if (sr != null)
{
string allLines = sr.ReadToEnd();
}
}
}
edit: может быть проблема в том, как я преобразую StreamReader в строку? Я имею в виду эту строку:
string allLines = sr.ReadToEnd();
Должен ли я использовать что-нибудь еще?