C#Webclient返回错误404

时间:2017-07-07 13:05:52

标签: c# html http-status-code-404 webclient

我正在使用以下脚本从URL中检索HTML。

string webURL = @"https://nl.wiktionary.org/wiki/" + word.ToLower();
                using (WebClient client = new WebClient())
                {
                      string htmlCode = client.DownloadString(webURL);                
                }

变量字可以是任何字。如果没有WIKI页面的“word”被检索,代码将以代码404结束,而用浏览器检索URL会打开一个WIKI页面,表示此项目没有页面。

我想要的是代码总是获取HTML,当WIKI页面显示还没有信息时。我不想通过try和catch来避免错误404。

有没有人知道为什么这不适用于Webclient?

2 个答案:

答案 0 :(得分:4)

试试这个。您可以在try catch块中捕获404错误内容。

        var word = Console.ReadLine();
        string webURL = @"https://nl.wiktionary.org/wiki/" + word.ToLower();
        using (WebClient client = new WebClient() {  })
        {
            try
            {

                string htmlCode = client.DownloadString(webURL);

            }
            catch (WebException exception)
            {
                string responseText=string.Empty;

                var responseStream = exception.Response?.GetResponseStream();

                if (responseStream != null)
                {
                    using (var reader = new StreamReader(responseStream))
                    {
                        responseText = reader.ReadToEnd();
                    }
                }

                Console.WriteLine(responseText);
            }
        }

        Console.ReadLine();

答案 1 :(得分:0)

由于此WIKI服务器使用区分大小写的URL映射,因此不要修改URL的大小写(从代码中删除“.ToLower()”。)

例: 小写:
https://nl.wiktionary.org/wiki/categorie:onderwerpen_in_het_nynorsk
结果:HTTP 404(未找到)

正常(未修改)案例
https://nl.wiktionary.org/wiki/Categorie:Onderwerpen_in_het_Nynorsk
结果:HTTP 200(确定)

另外,请记住大多数(如果不是全部)WiKi服务器(包括此服务器)生成自定义404页面,因此在浏览器中它们看起来像“普通”页面,但是,尽管如此,它们仍然使用404 http代码。