【问题标题】:Why does a bad url result in UnknownError, instead of a 400 or 404 code? WebException为什么错误的 url 会导致 UnknownError,而不是 400 或 404 代码?网络异常
【发布时间】:2014-12-02 21:38:15
【问题描述】:

为什么这不会创建 WebExceptionStatus.ProtocolError?相反,我得到WebExceptionStatus.UnknownError

string url = "http://www.ogggle.com/"; // a bad url

var request = (HttpWebRequest) WebRequest.Create(url);

...省略了选项设置

using (var response = (HttpWebResponse) request.GetResponse())
    {
        foreach (Cookie cookie in response.Cookies)
            cookies.Add(cookie);

        string urlContent = "";
        using (var sr = new StreamReader(response.GetResponseStream()))
            urlContent = sr.ReadToEnd();

        return urlContent;
    }

现在会抛出一个 WebException;然而 WebExceptionStatus 实际上是 UnknownError。我期待一个协议错误。

catch (WebException we)
   {
    string message = "WEB EXCEPTION DETECTED. Retry counter: " + _retryCount;
    message += Environment.NewLine + "Problem with url: " + url + ". Status is: " + we.Status;
    message += Environment.NewLine + "Message is: " + we.Message;

    if (we.Status == WebExceptionStatus.ProtocolError)
    {
        message += Environment.NewLine + string.Format("Status Code : {0}", ((HttpWebResponse)we.Response).StatusCode);
        message += Environment.NewLine + string.Format("Status Description : {0}", ((HttpWebResponse)we.Response).StatusDescription);
    }

    WriteToErrorLog(message);
    if (DEBUG)
        Console.WriteLine(message);
    _retryCount++;
   }

在我看来,WebException 应该比这更聪明。格式错误或错误的 url 应导致有意义的 WebExceptionStatus。相反,它会导致无用的 UnknownError。当网址不好时,谁能帮我理解如何获得有意义的WebException

【问题讨论】:

  • HTTP 状态码来自 HTTP 响应。如果无法将 URL 解析为主机名,则没有 HTTP 响应。
  • 您是否尝试阅读回复 var resp = new StreamReader(we.Response.GetResponseStream()).ReadToEnd(); ?也许它可以提供帮助。
  • 我进行了编辑,将 url 更改为可以解析的。
  • @L.B 我已经在调用 urlContent = sr.ReadToEnd();这就是我认为你的建议。
  • @sapbucket 不,我建议它在你的期望块中使用它(参见变量 we,它是你的 WebException)。

标签: c# .net webexception


【解决方案1】:

您没有在问题中提供足够的信息来找出问题所在。您遇到问题的真正“错误”网址是什么? WebRequest.Create(string) 调用 new Url(string),当给定的字符串不是有效的 URL 时,将抛出 UriFormatException 异常。这就是它对给定代码和字符串的作用。

【讨论】:

  • 我正在使用一个 url 字符串生成器,它可以排列超过 1000 种可能的 url 字符串组合。其中大约 10% 是有效的。然后我爆破一个目标网站以从有效页面中获取数据。在我通过响应过程发送它们之前,我不知道它们是否有效。出于某种原因,我得到了我上面写的行为。
  • 在将最初给定的 url 从“aBadUrl”更改为“ogggle.com”后,它现在给出了一个状态为NameResolutionFailureWebException,这似乎是合理的,但仍然不是问题。
  • 这正是我想要发生的。谢谢您的确认。我将再次对其进行调试,看看能否重现您所看到的内容。
猜你喜欢
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多