代码之家  ›  专栏  ›  技术社区  ›  Fraction

如何检查它是否是404错误页并使用HtmlAgilityPack执行某些操作

  •  1
  • Fraction  · 技术社区  · 6 年前

    我正在尝试使用HtmlAgilityPack从不同的url获取多个数据。

    • 它将得到产品价格。
    • 但当产品库存为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 回复  |  直到 6 年前
        1
  •  0
  •   Nimrod Dolev    6 年前

    如果你投下 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 
            }
        }
    }
    

    至于使代码更简单-如果不了解更多关于程序和您要做的事情,很难准确理解您的意思。总的来说,这里有一些想法-