我正试图在此链接上搜索数据: 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;
?>
答案 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用于跟踪重定向。