【发布时间】:2014-11-03 15:21:30
【问题描述】:
目前我正在编写一个 PHP 脚本,它应该检查 URL 是否是最新的(返回 HTTP 200 代码或重定向到这样的 URL)。
由于要测试的几个 URL 返回一个文件,我想避免使用正常的 GET 请求,以便不必实际下载文件。
我通常会使用 HTTP HEAD 方法,但测试表明,许多服务器无法识别它并返回与相应 GET 请求不同的 HTTP 代码。
我的想法是发出 GET 请求并使用 CURLOPT_HEADERFUNCTION 定义一个回调函数,该函数检查标头第一行中的 HTTP 代码,然后通过返回 0(而不是标头),如果它不是重定向代码。
我的问题是:可以终止这样的 HTTP 请求吗?还是会对服务器产生负面影响?这真的会避免不必要的下载吗?
示例代码(未经测试):
$url = "http://www.example.com/";
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HEADER => true,
CURLINFO_HEADER_OUT => true,
CURLOPT_HTTPGET => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADERFUNCTION => 'requestHeaderCallback',
));
$curlResult = curl_exec($ch);
curl_close($ch);
function requestHeaderCallback($ch, $header) {
$matches = array();
if (preg_match("/^HTTP/\d.\d (\d{3}) /")) {
if ($matches[1] < 300 || $matches[1] >= 400) {
return 0;
}
}
return strlen($header);
}
【问题讨论】: