检查网页的响应状态并获取间歇性超时回复
Checking response status of web pages and getting intermittent timing out replies
我正在创建一个 windows 服务来检查我拥有的各种服务的状态。问题是 10 次中有 9 次响应 "times out"。有几次 google.ca 超时。
这是我的代码
try
{
var myRequest = (HttpWebRequest)WebRequest.Create(url);
NetworkCredential networkCredential = new NetworkCredential("UserName", "password", "domain");
// Associate the 'NetworkCredential' object with the 'WebRequest' object.
myRequest.Credentials = networkCredential;
myRequest.Timeout = Timeout.Infinite;
myRequest.KeepAlive = true;
var response = (HttpWebResponse)myRequest.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
bool isJson = Regex.IsMatch(url, "JSON", RegexOptions.IgnoreCase);
if (isJson)
{
StreamReader sr = new StreamReader(response.GetResponseStream());
if (sr.ReadToEnd().Contains("error"))
{
errorMessages = (string.Format("{0} unavailable: {1}", url, "The document contains the word error"));
return false;
}
}
return true;
}
else
{
errorMessages = (string.Format("{0} Returned, but with status: {1}", url, response.StatusDescription));
return false;
}
}
catch (Exception ex)
{
// not available at all, for some reason
errorMessages = (string.Format("{0} unavailable: {1}", url, ex.Message));
return false;
}
我认为是什么问题
如果我在 Chrome 中禁用缓存,当我访问某些页面时,有时 chrome 认为页面仍在加载,即使图像或页面已完全加载已加载。
无论如何我可以调整我的代码来适应这个吗?
编辑:添加
myRequest.Timeout = Timeout.Infinite;
myRequest.KeepAlive = true;
现在它会无限期挂起。
编辑:
有没有办法查看页面是否部分加载?我可以删除无限超时,并将其作为 streamreader 对象读取以查看它是否至少部分加载。
还要添加 UserAgent 字符串,因为某些网络服务器会在没有它的情况下阻止来自同一 IP 地址的重复请求。
您可能还想添加一个 cookie 容器并在请求之间保留它。
但是,请保持礼貌 - 不要忘记您正在增加网络服务器负载。如果这是您自己的网站,那很好 - 但如果是其他人的网站 - 您应该使用可识别您身份的 UserAgent,遵循他们的 robot.txt 文件指令并在请求之间使用合适的时间。
我正在创建一个 windows 服务来检查我拥有的各种服务的状态。问题是 10 次中有 9 次响应 "times out"。有几次 google.ca 超时。
这是我的代码
try
{
var myRequest = (HttpWebRequest)WebRequest.Create(url);
NetworkCredential networkCredential = new NetworkCredential("UserName", "password", "domain");
// Associate the 'NetworkCredential' object with the 'WebRequest' object.
myRequest.Credentials = networkCredential;
myRequest.Timeout = Timeout.Infinite;
myRequest.KeepAlive = true;
var response = (HttpWebResponse)myRequest.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
bool isJson = Regex.IsMatch(url, "JSON", RegexOptions.IgnoreCase);
if (isJson)
{
StreamReader sr = new StreamReader(response.GetResponseStream());
if (sr.ReadToEnd().Contains("error"))
{
errorMessages = (string.Format("{0} unavailable: {1}", url, "The document contains the word error"));
return false;
}
}
return true;
}
else
{
errorMessages = (string.Format("{0} Returned, but with status: {1}", url, response.StatusDescription));
return false;
}
}
catch (Exception ex)
{
// not available at all, for some reason
errorMessages = (string.Format("{0} unavailable: {1}", url, ex.Message));
return false;
}
我认为是什么问题
如果我在 Chrome 中禁用缓存,当我访问某些页面时,有时 chrome 认为页面仍在加载,即使图像或页面已完全加载已加载。
无论如何我可以调整我的代码来适应这个吗?
编辑:添加
myRequest.Timeout = Timeout.Infinite;
myRequest.KeepAlive = true;
现在它会无限期挂起。
编辑:
有没有办法查看页面是否部分加载?我可以删除无限超时,并将其作为 streamreader 对象读取以查看它是否至少部分加载。
还要添加 UserAgent 字符串,因为某些网络服务器会在没有它的情况下阻止来自同一 IP 地址的重复请求。
您可能还想添加一个 cookie 容器并在请求之间保留它。
但是,请保持礼貌 - 不要忘记您正在增加网络服务器负载。如果这是您自己的网站,那很好 - 但如果是其他人的网站 - 您应该使用可识别您身份的 UserAgent,遵循他们的 robot.txt 文件指令并在请求之间使用合适的时间。