我正在查看用户提供的URL列表,以查看哪些URL在请求时无法从服务器获取有效的HTTP响应代码。在质量检查期间,我们发现看起来像http://broken
的链接未被标记为无效。
我们有一个php脚本,它使用cURL获取http标头并解析响应代码。我们允许重定向,并使用返回的最终响应代码跟踪它们,如果有许多重定向。一个测试是说http://broken
的请求返回200.显然不是我想要的。那个格式不正确的网址会生成404响应,我想。
我将代码整理成一个小测试工具:
<?php
util_url_get_response_code("http://broken", true);
function util_url_get_response_code ($url, $follow_redirect = false) {
$handle = curl_init($url);
curl_setopt( $handle, CURLOPT_NOBODY, true );
curl_setopt( $handle, CURLOPT_HEADER, true );
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE);
if ($follow_redirect) { curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true); }
$data = curl_exec( $handle );
$err = curl_error($handle);
curl_close( $handle );
print_r($data);
}
?>
运行该测试代码时,打印的标题如下所示:
HTTP/1.1 302 Found
Date: Mon, 10 Jun 2013 17:39:30 GMT
Server: Apache/2.0.52 (CentOS)
X-Powered-By: PHP/5.1.6
Location: http://www.nitrc.org/
Content-Type: text/html; charset=UTF-8
HTTP/1.1 200 OK
Date: Mon, 10 Jun 2013 17:39:40 GMT
Server: Apache/2.0.52 (CentOS)
X-Powered-By: PHP/5.1.6
Set-Cookie: PHPSESSID=oorncckdt198341u4lccpoai12; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html; charset=UTF-8
查看第一个标题,看来cURL联系了www.nitrc.org服务器...这是我们的网站URL。 NITRC配置为将未知URL重定向到主页,因此我们最终获得200 OK响应头。
那么,我该怎样做才能让cURL查看http://broken
并以与浏览器相同的方式返回404错误?
(请注意,我无法关闭重定向处理,因为它是遵循任何有效重定向的要求的一部分!)
答案 0 :(得分:1)
感谢Brad指出我找到正确的方向:
我们的测试服务器既有DNS中定义的通配符* .nitrc.org,也有resolve.conf中的“search nitrc.org”指令。因此,每个无效的域都将被添加到nitrc.org,然后匹配我们的通配符dns。