HttpListener 仅捕获部分流量,但不捕获状态代码 302 重定向
本文关键字:状态 代码 重定向 获部 流量 HttpListener | 更新日期: 2023-09-27 18:31:02
我继承了一个使用 html 侦听器的代理服务器,但我遇到了一个问题。 基本思想是Web用户在尝试与Web服务器通信时连接到代理。 代理拦截请求并将其发送到 Web 服务器。 已获得响应,但现在看来我只捕获了返回的可能流之一。 我能够捕获状态代码为 200 但不能捕获状态代码为 302 的页面。
这是因为我只对我的请求做出直接回应(如果是这样,为什么)? 网络服务器正在发回 3 个流(由 wireshark 验证),但我的代理只收到其中一个。
System.Net.HttpListener应该捕获端口80(http://*:80/或//+:80/)上的所有内容,但它没有做我想要的。有什么帮助吗? 我可以提供尽可能多的信息,因为有人需要帮助!!
提前感谢,戴夫
既然你说HttpListener用于代理服务,那么我猜你正在使用HttpWebRequest向堆栈中的下一个服务发出出站请求。
302 状态代码会导致 HttpWebRequest 引发类型为 WebException 的异常。 如果 WebException.Status 是 WebExceptionStatus.ProtocolError,则需要检查状态代码并从异常中获取响应句柄,如下所示,用于要返回给调用方的代码。 下面的示例显示了 304 的这一点,但同样适用于 302。
希望这有帮助!
bool protocolError = false;
try
{
webResponse = (HttpWebResponse)hwr.EndGetResponse(arGetResponse);
}
catch (WebException e)
{
if (e.Status == WebExceptionStatus.ProtocolError)
{
webResponse = (HttpWebResponse)e.Response;
// 304s throw an exception... ridiculous!
if (webResponse.StatusCode != HttpStatusCode.NotModified)
{
// This indicates that the response is valid but has a protocol-level error like 404
protocolError = true;
}
}
else
{
throw;
}
}