【问题标题】:How do I get headers from a 401 Server Error如何从 401 服务器错误中获取标头
【发布时间】:2012-01-31 05:08:08
【问题描述】:

我正在编写一个端口扫描程序来检测本地网络上运行的 Web 服务。其中一些 Web 服务需要基本身份验证 - 我不知道这些服务的用户名/密码,我只想列出它们,所以在这个阶段我无法提供凭据。我正在使用代码:

                    var request = (HttpWebRequest)WebRequest.Create("http://" + req);
                    request.Referer = "";
                    request.Timeout = 3000;
                    request.UserAgent = "Mozilla/5.0";
                    request.AllowAutoRedirect = false;
                    request.Method = WebRequestMethods.Http.Head;

                    HttpWebResponse response = null;

                    try
                    {
                        response = (HttpWebResponse) request.GetResponse();
                        // I want to parse the headers here for the server name but as the exception is thrown the response object is null.

                    }
                    catch (Exception ex)
                    {
                        //401 error is caught here - response is null
                    }

然后我从返回的标头中解析出服务器名称 - 我知道它们正在被返回,因为我可以使用提琴手看到它们,但 HttpWebResponse 对象设置为 null,因为 GetResponse() 方法正在引发异常.基本上 - 我如何让它不抛出异常,而是返回标头以及状态码 401。

【问题讨论】:

  • 您可以控制网络服务吗?更具体地说,您是否可以控制他们的代码?此外,“端口扫描器”与 HTTP 无关,可以尝试使用 TCPClient 类。
  • 不,我无法控制 Web 服务 - 我正在寻找 IP 摄像头,所以我正在专门寻找 Web 服务器。不过感谢您的建议。

标签: c# .net httpwebrequest


【解决方案1】:

如果您发现WebException,您将可以访问ex.Response,并且可以从那里检索您的标头。

【讨论】:

  • 注意:这是您不应该依赖的未定义行为。
  • 哪些消息来源告诉您这是未定义的?它有完整的文档记录。除了 HTTP 超时或连接失败之外,您可以期待对所有内容的响应...msdn.microsoft.com/en-us/library/…
  • 我的来源是什么?经验...这不是我建议的。它依赖于在流中提供响应的服务器,而这种响应很少得到保证。
猜你喜欢
  • 2019-07-22
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
相关资源
最近更新 更多