0

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

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

System.Net.HttpListener 应该捕获端口 80(http://*:80/ 或 //+:80/)上的所有内容,但它没有做我想要的。有什么帮助吗?我可以提供尽可能多的信息,因为有人需要帮助!!!

在此先感谢,戴夫

4

1 回答 1

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;
    }
}
于 2013-10-24T18:43:24.257 回答