php - 给定错误 URL 时 cURL 连接到本地主机

标签 php http curl

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

我们有一个 php 脚本,它使用 cURL 获取 http header 并解析出响应代码。我们确实允许重定向,如果有多个重定向,我们会使用返回的最终响应代码来跟踪它们。一项测试表明对 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);
}
?>

运行该测试代码时,打印的 header 如下所示:

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

查看第一个 header ,cURL 似乎联系了 www.nitrc.org 服务器...这是我们的网站 URL。 NITRC 配置为将未知 URL 重定向到主页,因此我们最终得到一个 200 OK 响应 header 。

那么,我该怎么做才能让 cURL 查看 http://broken 并像浏览器一样返回 404 错误?

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

最佳答案

感谢 Brad 为我指明了正确的方向:

我们的测试服务器在 DNS 中定义了一个通配符 *.nitrc.org,在 resolve.conf 中也有一个“搜索 nitrc.org”指令。因此,每个无效的域都将添加到 nitrc.org 之前,然后匹配我们的通配符 dns。

关于php - 给定错误 URL 时 cURL 连接到本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17031391/

相关文章:

php - 在php中通过admin添加、删除和编辑用户

google-chrome - 为什么 HTTP/2 的浏览器实现需要 TLS?

javascript - Node.JS 函数返回 http 响应值

php - create-react-app 代理请求到 php 后端

bash - curl -C, --continue-at 在管道标准输出时工作吗?

php - JOIN 只返回一个结果

php - 在Kubernetes中实现前端和后端时无法连接到数据库

php - Xdebug Profiler 为自动添加的文件而不是目标文件创建一个 cachegrind.out 文件

http - Curl GET/POST 原始数据包括 header ?

php - PHP cURL 和 SSL 的奇怪超时