在C#中,我需要快速测试URL,而不是真正等待完整的响应。如果有响应或其他方式快速测试URL,有没有办法辍学?
我正在从网站检索大量数据,只需要确保它事先存在。
这就是我现在所拥有的:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(arg.Sources[i]);
try
{
request.GetResponse();
}
catch (Exception ex)
{
CMD("HTML Connection Fail");
return false;
}
CMD("Connection Successful");
等待响应需要很长时间,但有什么东西我可以替换它吗?
还有其他方法可以测试URL连接而无需等待服务器的完整响应吗?
如果您不希望浏览器崩溃,网站会将returnall更改为false:“www.odata.charities.govt.nz/GrpOrgLatestReturns?$filter=RegistrationStatus%20eq%20%27Registered%27&$returnall=真安培; $格式= CSV%22"
答案 0 :(得分:2)
如果您不需要接收内容并需要验证网址的正确性,则可以使用request.Method = "HEAD"
。但是,这可能不适用于某些服务器。
答案 1 :(得分:1)
尝试将方法更改为HEAD
。服务器应该只返回没有正文的标题,因此应该快速返回。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(arg.Sources[i]);
try
{
request.Method = "HEAD";
request.GetResponse();
}
catch (Exception ex)
{
CMD("HTML Connection Fail");
return false;
}
CMD("Connection Successful");
答案 2 :(得分:1)
ping网址是否适合您?查看Ping类:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx
Ping pingSender = new Ping ();
PingReply reply = pingSender.Send ("www.contoso.com");
if (reply.Status == IPStatus.Success)
{
// Looks good
}
else
{
// Doesn't exist or is down
}
答案 3 :(得分:0)
您可以在请求上使用BeginGetResponse
方法,该方法会立即返回而不会阻止调用方线程。您需要提供一个回调函数,一旦客户端从服务器收到一些响应,就会调用该函数。但是,当然这个回调将在实际调用BeginGetResponse方法之后的不同线程上调用。在这个回调中,如果需要,可以放置tr / catch语句并解析服务器的实际响应。