我使用html监听器继承了代理服务器,但我遇到了问题。基本思想是Web用户在尝试与Web服务器通信时连接到代理。代理拦截请求并将其发送到Web服务器。获得了响应,但现在看来我只是捕获了一个可能的流回来。我能够捕获状态代码为200但不是状态代码为302的页面。
这是因为我只是对我的请求进行直接回复(如果是,为什么)?网络服务器正在发回3个流(由wireshark验证),但我的代理只获得其中一个。
System.Net.HttpListener应该捕获端口80上的所有内容(http:// *:80 /或// +:80 /),但它没有按照我想要的方式进行操作。 有帮助吗?我可以根据需要提供尽可能多的信息来帮助!!!
提前致谢, 戴夫
答案 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;
}
}