我正在尝试编写一个重定向检查程序,我今天早上刚刚将这个解决方案捆绑在一起,所以它不是最有效的,但除了一件事情之外我还需要做的一切:
它只在停止之前检查两个站点,没有发生错误,它只是停在“request.GetResponse()上作为HttpWebResponse;”第三页的行。
我尝试过使用不同的网站并更改页面组合以进行检查,但它只检查了两个。
有什么想法吗?
string URLs = "/htmldom/default.asp/htmldom/dom_intro.asp/htmldom/dom_examples2.asp/xpath/default.asp";
string sURL = "http://www.w3schools.com/";
string[] u = Regex.Split(URLs, ".asp");
foreach (String site in u)
{
String superURL = sURL + site + ".asp";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(superURL);
request.Method = "HEAD";
request.AllowAutoRedirect = false;
var response = request.GetResponse() as HttpWebResponse;
String a = response.GetResponseHeader("Location");
Console.WriteLine("Site: " + site + "\nResponse Type: " + response.StatusCode + "\nRedirect page" + a + "\n\n");
}
答案 0 :(得分:5)
除了抛出WebException
之外它会破裂的事实,我相信它刚刚停止的原因是你永远不会丢弃你的回应。如果您有多个URL实际由同一站点提供服务,则它们将使用连接池 - 并且不会丢弃响应,您不会释放连接。你应该使用:
using (var response = request.GetResponse())
{
var httpResponse = (HttpWebResponse) response;
// Use httpResponse here
}
请注意,我在此处投放而非使用as
- 如果回复不是 HttpWebResponse
,则该行上的InvalidCastException
更多提供信息而不是下一行的NullReferenceException
......