0

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

4

4 回答 4

2

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

于 2013-09-12T20:18:16.883 回答
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");
于 2013-09-12T20:18:46.020 回答
1

ping URL 是否适合您?查看 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
}
于 2013-09-12T20:21:30.943 回答
0

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

于 2013-09-12T20:14:39.677 回答