快速测试 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的正确性,则可以使用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语句,并在需要时解析来自服务器的实际响应。