CURLOPT_FOLLOWLOCATION无效

时间:2011-05-14 13:56:31

标签: php http url refresh

我正试图在此链接上搜索数据: http://www.treasurydirect.gov/NP/BPDLogin?application=np

包含元刷新。

我正在使用curl_exec并将CURLOPT_FOLLOWLOCATION设置为true。

在phpinfo()中,我确认没有设置安全模式和basedir。但是CURLOPT_FOLLOWLOCATION仍然无效。这是我的代码:

<?php 
error_reporting(E_ALL);

$url = 'http://www.treasurydirect.gov/NP/BPDLogin?application=np';

// READ THE WEB PAGE
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_COOKIEFILE,"cookies.txt");
curl_setopt($ch,CURLOPT_COOKIEJAR,"cookies.txt");
curl_error($ch);
$htm = curl_exec($ch);
curl_close($ch);

// MAKE OUR OUTPUT EASY TO READ
echo "<pre>";

// GET THE TITLE
$txt = strip_tags($htm, '<title>');
$rgx
= '#'            // REGEX DELIMITER - START
. '\<title\>'    // TITLE TAG WITH ANGLE BRACKETS ESCAPED - START
. '(.*?)'        // GROUP OF ANYTHING
. '\</title\>'   // TITLE TAG WITH ANGLE BRACKETS ESCAPED - END
. '#'            // REGEX DELIMITER - END
. 'is'           // CASE-INSENSITIVE, SINGLE LINE
;
preg_match($rgx, $txt, $arr);

// DISPLAY THE TITLE
echo
'<strong>'
. $arr[1]
. '</strong>'
. PHP_EOL
. PHP_EOL
;

// SHOW THE PAGE SOURCE
$src = htmlentities($htm);
echo $src;

?>

2 个答案:

答案 0 :(得分:2)

问题不在于元刷新标记(顺便说一句,CURLOPT_FOLLOWLOCATION选项后面将永远不会出现),而是HTTP用户代理标头。网站根据接受的用户代理列表检查HTTP用户代理标头字段。您可以在设置$ ch:

的选项时通过添加以下行来解决此问题
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

答案 1 :(得分:1)

Meta刷新是浏览器的说明。 Curl不处理这些。 CURLOPT_FOLLOWLOCATION用于跟踪重定向。