我希望能够验证表单以检查网站/网页是否存在。如果它返回404错误,那么肯定不应该验证。如果有重定向...我接受建议,有时重定向会转到错误页面或主页,有时他们会转到您要查找的页面,所以我不知道。也许对于重定向,可能会有一个特殊通知,向用户建议目的地地址。
到目前为止,我发现的最好的事情就是这样:
$.ajax({url: webpage ,type:'HEAD',error:function(){
alert('No go.');
}});
404和200的问题没有问题,但如果您为网址执行类似'http://xyz'
的操作,它就会挂起。 302等也会触发错误处理程序。
这是一个通用的问题我想要一个完整的工作代码示例,如果有人可以制作一个。这对很多人来说都很方便。
答案 0 :(得分:3)
听起来你不关心网页的内容,你只想知道它是否存在。以下是我在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。
干杯。
答案 1 :(得分:1)
首先,您需要通过DNS检查页面是否存在。这就是为什么你说它“只是挂起” - 它正在等待DNS查询超时。它实际上并没有挂起。
检查DNS后,检查您是否可以连接到服务器。如果你不小心,这是另一个长时间超时。
最后,执行HTTP HEAD并检查状态代码。这里有许多很多很多特殊情况需要考虑:“临时内部服务器错误”对于存在的页面意味着什么?那么“永久感动”呢?查看HTTP状态代码。
答案 2 :(得分:1)
我刚刚使用PHP编写了一个更简单的版本:
function url_check($url) {
$x = @fopen($url,"r");
if ($x) {
$reply = 1;
fclose($x);
} else {
$reply = 0;
}
return $reply;
}
显然$url
是测试网址,根据网址的存在返回true(1)或false(0)。
答案 3 :(得分:0)
也许你可以结合使用域检查器,而jQuery,域检查器(PHP)可以对不存在的域响应1或0。
例如。 http://webarto.com/snajper.php?domena=stackoverflow.com,将返回1,您可以使用输入模糊功能立即检查它。