C#HTTPWebRequest不能用于定期访问URL?
我正在编写一个使用C#HTTTWebRequest抓取网页的程序。因为我需要监视特定URL的更新,所以我编写如下代码。然而,我注意到我只能得到两次回复。在那之后,它没有得到任何回应。即使我把时间延长到一分钟,我还是遇到了同样的问题。我不明白为什么。你能帮我一下吗?非常感谢 伟大的自由C#HTTPWebRequest不能用于定期访问URL?,c#,http,C#,Http,我正在编写一个使用C#HTTTWebRequest抓取网页的程序。因为我需要监视特定URL的更新,所以我编写如下代码。然而,我注意到我只能得到两次回复。在那之后,它没有得到任何回应。即使我把时间延长到一分钟,我还是遇到了同样的问题。我不明白为什么。你能帮我一下吗?非常感谢 伟大的自由 while (true) { WebRequest http = HttpWebRequest.Create("http://www.sina.com.cn"); HttpWebResponse r
while (true)
{
WebRequest http = HttpWebRequest.Create("http://www.sina.com.cn");
HttpWebResponse response = (HttpWebResponse)http.GetResponse();
Console.WriteLine(response.LastModified);
Thread.Sleep(5000);
}
您应该在完成respose的操作后调用
response.Close()
,或者使用使用(HttpWebResponse response…
自动关闭它imaximchuk的回答是正确的,但没有解释原因
HTTP连接是池连接-一个连接将被重新用于一个新请求(如果可用),当您关闭或处理web响应时,会将连接返回到池中。在您的情况下,您没有关闭或处理响应,因此不会将其返回到池中。到任何特定对象的连接数都是最大的r主机,可配置,但通常不应更改。默认设置为两个连接-这就是为什么您看到两个工作响应,然后超时
我相信某个地方有一个终结器,当它注意到相关对象符合垃圾收集的条件时,它会释放连接,但这是不确定的
基本上:始终关闭web响应,理想情况是使用和语句
while (true)
{
WebRequest http = WebRequest.Create("http://www.sina.com.cn");
using (HttpWebResponse response = (HttpWebResponse)http.GetResponse())
{
Console.WriteLine(response.LastModified);
}
Thread.Sleep(5000);
}
“我没有得到响应”是什么意思?是否存在异常、空响应流、HTTP错误?线程在HttpWebResponse=(HttpWebResponse)HTTP.GetResponse()行被阻塞,直到出现超时异常。非常感谢您的回答!非常感谢您的回答!