7

我希望能够验证表单以检查网站/网页是否存在。如果它返回 404 错误,那么绝对不应该验证。如果有重定向...我愿意接受建议,有时重定向会转到错误页面或主页,有时会转到您要查找的页面,所以我不知道。也许对于重定向,可能会有一个特殊通知,向用户建议目标地址。

到目前为止我发现的最好的东西是这样的:

$.ajax({url: webpage ,type:'HEAD',error:function(){
    alert('No go.');
}});

这对 404 和 200 没有问题,但如果你'http://xyz'对 url 执行类似操作,它就会挂起。302 等也会触发错误处理程序。

这是一个足够通用的问题,如果有人可以制作一个完整的工作代码示例,我想要一个完整的工作代码示例。这对很多人来说可能很方便。

4

4 回答 4

4

听起来您并不关心网页的内容,您只想看看它是否存在。下面是我在 PHP 中的做法——我可以阻止 PHP 占用页面内容的内存。

/*
 * Returns false if the page could not be retrieved (ie., no 2xx or 3xx HTTP
 * status code). On success, if $includeContents = false (default), then we
 * return true - if it's true, then we return file_get_contents()'s result (a
 * string of page content).
 */
function getURL($url, $includeContents = false)
{
  if($includeContents)
    return @file_get_contents($url);

  return (@file_get_contents($url, null, null, 0, 0) !== false);
}

为了减少冗长,用这个替换上面函数的内容。

return ($includeContents) ? 
               @file_get_contents($url) :  
               (@file_get_contents($url, null, null, 0, 0) !== false)
;

有关如何使用流上下文指定 HTTP 标头的详细信息,请参阅http://www.php.net/file_get_contents 。

干杯。

于 2010-08-21T04:55:57.477 回答
1

首先,您需要通过 DNS 检查该页面是否存在。这就是为什么你说它“只是挂起” - 它正在等待 DNS 查询超时。它实际上并没有挂起。

检查 DNS 后,检查是否可以连接到服务器。如果您不小心,这是另一个长时间的超时。

最后,执行 HTTP HEAD 并检查状态码。您必须在这里考虑许多许多特殊情况:“临时内部服务器错误”对现有页面意味着什么?“永久搬家”呢?查看 HTTP 状态代码。

于 2010-08-21T03:17:56.653 回答
1

我刚刚使用 PHP 编写了一个更简单的版本:

function url_check($url) {

$x = @fopen($url,"r");

if ($x) {

         $reply = 1;

         fclose($x);

} else {

            $reply = 0;

}

return $reply;

}

显然$url是测试 URL,根据 URL 的存在返回 true (1) 或 false (0)。

于 2011-03-23T17:06:23.597 回答
0

也许您可以结合域检查器和 jQuery,域检查器 (PHP) 可以对不存在的域响应 1 或 0。

例如。http://webarto.com/snajper.php?domena=stackoverflow.com,将返回 1,您可以使用输入模糊功能立即检查它。

于 2010-08-21T03:29:51.923 回答