快速测试 URL,无需使用 GetResponse()

本文关键字:GetResponse 测试 URL | 更新日期: 2023-09-27 18:31:04

在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=true&$format=csv%22"

快速测试 URL,无需使用 GetResponse()

如果您不需要接收内容并且需要验证URL的正确性,则可以使用request.Method = "HEAD"。但是,这可能不适用于某些服务器。

尝试将方法更改为 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");

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
}

您可以在请求上使用 BeginGetResponse 方法,该方法会立即返回而不会阻塞调用方线程。您需要提供一个回调函数,一旦客户端收到来自服务器的某些响应,就会调用该函数。但是,当然,此回调将在对 BeginGetResponse 方法的实际调用之后在不同的线程上调用。正是在这个回调中,你可以放置你的tr/catch语句,并在需要时解析来自服务器的实际响应。