【问题标题】:Read source code of 404 page using WebClient in C#?在 C# 中使用 WebClient 读取 404 页面的源代码?
【发布时间】:2018-05-11 20:44:40
【问题描述】:

我有一个返回自定义 404 页面的站点,我需要获取它的源代码并确定它返回的 404 类型。有没有办法获取404页面的源代码?

try
{
    using (var webClient = new WebClient())
    {
        webClient.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0)");
        webClient.DownloadFile(new Uri(file.Address), file.SaveLocation);
    }
}
catch (WebException e)
{
    // read source code here...
}

【问题讨论】:

  • 404 表示没有找到终点。不知道你想如何阅读不存在的东西的来源。
  • 404可以返回自定义错误页面,错误码(状态码)表示文件未找到,不一定是页面。
  • 我需要在 C# 中为通用 URL 执行此操作。我需要获取页面的内容,404错误页面。
  • MSDN 页面说 WebException 具有 Response 和 Source 属性(不,在这种情况下,“源”不是“源代码”)。也许其中之一就是您正在寻找的东西?您是否尝试过其中任何一种? msdn.microsoft.com/en-us/library/…
  • 你所说的404页面是指“软404”页面吗?比如这个?gstatic.com/images/icons,即它返回一个带有404标题的页面内容。

标签: c# .net


【解决方案1】:

这是一个解决方案(经过测试),公平地说,@KamilJarosz 在对您的问题的评论中暗示:

...
catch (WebException e)
{
    if (e.Response != null && (e.Response as HttpWebResponse).StatusCode == HttpStatusCode.NotFound)
    {
        var Html404Page = new StreamReader(e.Response.GetResponseStream()).ReadToEnd().ToString();
    }
}

当然我以为你想要一个字符串,所以我将答案改编为question

编辑

我还添加了一个保护子句,以防止在响应为空时出现进一步的问题,并在响应不是 404 时进行处理。

【讨论】:

  • 如果响应为空怎么办?
  • @chaotic AFAIK 如果异常与 404 无关,但与先前的错误有关,例如如果file.SaveLocation 不是完整路径,或者您提供的 URL 是否无法解析。为什么要问?
  • @chaotic 我更新了我的答案以考虑到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多