Как проверить, что это ошибка 404 и что-то сделать, используя HtmlAgilityPack - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь получить несколько данных из разных 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)));

1 Ответ

0 голосов
/ 18 декабря 2018

Если вы разыгрываете 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 
        }
    }
}

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

...