Php 提供错误URL时连接到本地主机的cURL

Php 提供错误URL时连接到本地主机的cURL,php,http,curl,Php,Http,Curl,我正在浏览一个用户提供的URL列表,以查看哪些URL在被请求时没有从服务器获得有效的HTTP响应代码。在QA期间,我们发现链接看起来像http://broken未被标记为无效 我们有一个php脚本,它使用cURL获取http头并解析响应代码。我们确实允许重定向,如果有许多重定向,则使用返回的最终响应代码跟踪它们。一个测试是说请求http://broken返回一个200。显然不是我想要的。我认为,那个格式不正确的url应该会生成404响应 我将代码拉入一个小测试线束: <?php util_

我正在浏览一个用户提供的URL列表,以查看哪些URL在被请求时没有从服务器获得有效的HTTP响应代码。在QA期间,我们发现链接看起来像
http://broken
未被标记为无效

我们有一个php脚本,它使用cURL获取http头并解析响应代码。我们确实允许重定向,如果有许多重定向,则使用返回的最终响应代码跟踪它们。一个测试是说请求
http://broken
返回一个200。显然不是我想要的。我认为,那个格式不正确的url应该会生成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);
}
?>
查看第一个标题,cURL似乎联系了www.nitrc.org服务器……这是我们的网站URL。NITRC被配置为将未知URL重定向到主页,因此我们最终得到一个200 OK响应头

那么,我该怎么做才能让cURL看到
http://broken
并以浏览器相同的方式返回404错误


(请注意,我无法关闭重定向处理,因为遵循任何有效的重定向都是要求的一部分!)

感谢Brad为我指出了正确的方向来找到以下内容:


我们的测试服务器在DNS中定义了一个通配符*.nitrc.org,在resolve.conf中还定义了一个“search nitrc.org”指令。因此,每一个无效的域都会在nitrc.org前面加上前缀,然后与我们的通配符dns匹配。

您的网络上可能有一些坏掉的网络设备正在与dns发生冲突。(恶意软件、捕获门户软件、“智能”DNS过滤等)这与您的代码或cURL无关。您可以尝试连接任何whois服务,您可以了解此服务器是否可访问…此
smart
过滤至少应给出404…但我想您可以尝试禁用此功能。如果您还不是网络管理员,请联系网络管理员。我认为这不是恶意软件,因为有效域会返回预期的响应。但是,当域无效时,is的行为似乎很奇怪。我将与网络管理员交谈,看看是否有HTTP代理或其他网络异常可能是导致这些异常结果的原因。
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