HttpListener仅捕获一些流量但不捕获状态码302重定向

时间:2013-09-12 15:58:21

标签: c# proxy http-status-code-302 httplistener

我使用html监听器继承了代理服务器,但我遇到了问题。基本思想是Web用户在尝试与Web服务器通信时连接到代理。代理拦截请求并将其发送到Web服务器。获得了响应,但现在看来我只是捕获了一个可能的流回来。我能够捕获状态代码为200但不是状态代码为302的页面。

这是因为我只是对我的请求进行直接回复(如果是,为什么)?网络服务器正在发回3个流(由wireshark验证),但我的代理只获得其中一个。

System.Net.HttpListener应该捕获端口80上的所有内容(http:// *:80 /或// +:80 /),但它没有按照我想要的方式进行操作。 有帮助吗?我可以根据需要提供尽可能多的信息来帮助!!!

提前致谢, 戴夫

1 个答案:

答案 0 :(得分:0)

既然你说在代理服务中使用了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;
    }
}