不使用GetResponse()快速测试URL

时间:2013-09-12 20:13:27

标签: c# .net url

在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"

4 个答案:

答案 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语句并解析服务器的实际响应。