C# HttpWebRequest.AllowAutoRedirect=false是否会导致超时?
我需要测试大约300个URL,以验证它们是否指向实际页面或重定向到其他页面。我在.NET2.0中使用HttpWebRequest编写了一个简单的应用程序来检查它。下面是代码片段:C# HttpWebRequest.AllowAutoRedirect=false是否会导致超时?,c#,.net,redirect,httpwebrequest,C#,.net,Redirect,Httpwebrequest,我需要测试大约300个URL,以验证它们是否指向实际页面或重定向到其他页面。我在.NET2.0中使用HttpWebRequest编写了一个简单的应用程序来检查它。下面是代码片段: System.Net.HttpWebRequest wr = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create( url ); System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse
System.Net.HttpWebRequest wr = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create( url );
System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)wr.GetResponse();
code = resp.StatusDescription;
代码运行速度很快,并写入文件,使我的所有URL返回状态200OK。然后我意识到默认情况下GetResponse()遵循重定向。我真傻!因此,我添加了一行以使其正常工作:
System.Net.HttpWebRequest wr = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create( url );
wr.AllowAutoRedirect = false;
System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)wr.GetResponse();
code = resp.StatusDescription;
我再次运行程序并等待。。。等待。。。等待。。。事实证明,对于每个url,我都会得到一个System.Net.WebException“操作已超时”。很惊讶,我手动检查了URL-工作正常。。。我注释掉了AllowAutoRedirect=false行-它再次正常工作。未注释此行-超时。有什么想法可能导致这个问题以及如何解决吗?通常超时是由于没有处理web响应。对于
HttpWebResponse
,您应该有一个using
语句:
using (HttpWebResponse resp = (HttpWebResponse)wr.GetResponse())
{
code = resp.StatusDescription;
// ...
}
我们需要做更多的分析来预测这是否确实是问题所在。。。或者你可以试试:)
原因是.NET有一个连接池,如果不关闭响应,连接不会返回到该池(至少在GC完成响应之前)。这会导致请求在等待连接时挂起。不知道为什么它在没有AllowAutoRedirect=false的情况下工作正常,也不知道它是如何在第一次请求时知道我无法正确关闭它的,但这很有帮助@perpetka:当它重定向时,它可能正在关闭原始连接,并且有足够多的不同主机可以重定向到它避免了问题。这是有道理的。非常感谢你的帮助!