CURLOPT_FOLLOWLOCATION не работает - PullRequest
2 голосов
/ 14 мая 2011

Я пытаюсь очистить данные по этой ссылке: 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 ]

2 голосов
/ 14 мая 2011

Проблема не в мета-теге обновления (за которым никогда не последует опция CURLOPT_FOLLOWLOCATION), а в заголовке агента пользователя HTTP. Веб-сайт сверяет поле заголовка агента пользователя HTTP со списком принятых пользовательских агентов. Вы можете решить эту проблему, добавив следующую строку при установке параметров для $ ch:

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
1 голос
/ 14 мая 2011

Мета-обновления - это инструкции для браузера.Керл не обрабатывает их.CURLOPT_FOLLOWLOCATION предназначен для следующих перенаправлений.

...