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 仅捕获部分流量,但不捕获状态代码 302 重定向

既然你说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;
    }
}