是否有一种可靠的方法来验证URL的存在

本文关键字:方法 验证 存在 URL 一种 是否 | 更新日期: 2023-09-27 18:04:18

我有一个c# MVC4网站,叫它foo.org。其中有"页面",如foo.org/news或foo.org/events。这是一个http网站,不是https。

我有另一个c# MVC4网站,也是一个http网站,管理第一个(在同一个web服务器上)。在后一个网站中,我需要验证第一个网站中是否存在诸如"foo.org/news"之类的页面。

都是内部网。

foo.org/news和foo.org/events实际上是有效的页面。如果我把它们的网址放在浏览器的地址栏上,它们就会出现……没问题。

我尝试了SO和其他论坛的一些建议,但都无济于事。

我尝试过的事情:

HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest;
request.Method = "HEAD";
HttpWebResponse response = request.GetResponse() as HttpWebResponse);
var retval = (response.StatusCode == HttpStatusCode.OK);
response.Close();
return retval;

var pingSender = new Ping();
var options = new PingOptions();
options.DontFragment = true;
var data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
var buffer = Encoding.ASCII.GetBytes(data);
var timeout = 120;
var reply = pingSender.Send(uri, timeout, buffer, options);
return (reply.Status == IPStatus.Success);

IPHostEntry ipHost = Dns.GetHostEntry(safeHost);
return (ipHost.HostName != null && ipHost.HostName != "");

在每一个,我尝试了带和不带前缀"http://"。

现在我通过一个接一个地尝试来组合所有3,并返回我遇到的第一个成功。我可以验证url,如google.com或foo.org,但不能当我有"/news"附加到foo.org。

上面的代码和我写的不完全一样,只是其中的一部分。

是否有一种可靠的方法来验证URL的存在

根据验证URL的程度从差到好来排序选项:

  • 您的第三个选项只查找URL的DNS记录。即使没有web服务器监听该IP,它也会返回true。
  • 第二个选项将ping web服务器,但你不能保证ping是允许的(这会给一个假阴性),或者响应的设备是实际的web服务器(这会给一个假阳性)。
  • 第一个选项将与web服务器对话以验证页面,但并非所有服务器都会正确响应HEAD请求(这可能是您在这种情况下的问题)。这仍然会有假阳性和假阴性,但它比上述选项要好。
  • 第一个选项的一个变体是将HTTP方法改为GET请求。这将要求web服务器提供实际的网页。这将给出最正确的答案,看看网页是否存在,但总会有一些情况下,你不会得到正确的答案。