Как проверить, не является ли страница с ошибкой 404, и что-то сделать с помощью HtmlAgilityPack

Я пытаюсь получить несколько данных с разных URL-адресов с помощью HtmlAgilityPack.

  • Он получит цены на товары.
  • Но когда товарный запас равен 0. Они закрывают страницу.

Моя программа добавляет цены в список. Когда страница выдает 404, она должна добавить пустой элемент списка.

Есть ли способ упростить программу? Я не могу использовать одни и те же переменные на одной и той же кнопке. Я добавляю тот же код, меняя числа (6).

WebRequest SiteyeBaglantiTalebi06 = HttpWebRequest.Create("https://www.themia.com.tr/The-Mia-Dekor-Mermer-22-Cm-Gri,PR-2432.html");
WebResponse GelenCevap06 = SiteyeBaglantiTalebi06.GetResponse();
StreamReader CevapOku06 = new StreamReader(GelenCevap06.GetResponseStream());

string KaynakKodlar06 = CevapOku06.ReadToEnd();
int IcerikBaslangicIndex06 = KaynakKodlar06.IndexOf("<div class=\"productPrice\">") + 122;
int IcerikBitisIndex06 = KaynakKodlar06.Substring(IcerikBaslangicIndex06).IndexOf("</div>");

listBox3.Items.Add((KaynakKodlar06.Substring(IcerikBaslangicIndex06, IcerikBitisIndex06)));

person Fraction    schedule 18.12.2018    source источник
comment
форматирование кода, базовое редактирование текста   -  person Sir l33tname    schedule 18.12.2018


Ответы (1)


Если вы примените WebResponse, который у вас есть, к HttpWeResponse, вы получите доступ к свойству StatusCode - https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebresponse.statuscode?view=netframework-4.7.2#System_Net_HttpWebResponse_StatusCode;

Следует отметить одно: вы не можете заставить HttpWebRequest НЕ генерировать исключение, когда он получает код состояния, который не указывает на успех (тем более, что не использовать этот метод). Это означает, что вы должны быть готовы перехватить возникшее исключение.

Итак, в случае вашего примера это будет -

WebRequest SiteyeBaglantiTalebi06 = HttpWebRequest.Create("https://www.somesite.com/NotARealPath");
try
{
    WebResponse GelenCevap06 = SiteyeBaglantiTalebi06.GetResponse();
    // do things with the result
}
catch (WebException ex)
{
    using (WebResponse response = ex.Response)
    {
        HttpWebResponse asHttp = (HttpWebResponse)response;
        if (asHttp.StatusCode == System.Net.HttpStatusCode.NotFound)
        {
            // your 404 logic here
        }
        else 
        {
            // your "something went wrong but it's not a 404" logic 
        }
    }
}

Что касается упрощения кода - трудно понять, что вы имеете в виду, не понимая больше о вашей программе и о том, что вы пытаетесь сделать. В общем, вот несколько идей -

person Nimrod Dolev    schedule 18.12.2018
comment
Я все еще получаю эту ошибку: System.Net.WebException: «Удаленный сервер возвратил ошибку: (404) не найден». - person Fraction; 19.12.2018
comment
Вы правы - я забыл, что это поведение (выдача исключения) нельзя отключить (см. здесь, чтобы ответить на другой связанный вопрос). Я отредактировал ответ, чтобы показать, как с этим справиться (но я все же рекомендую вообще не работать с API, есть гораздо лучшие варианты. - person Nimrod Dolev; 19.12.2018