Пишу небольшой парсер, который будет проходить по готовому списку ссылок на товары и брать оттуда актуальные цены, но проблема в том, что каталог закрытый и доступен только авторизированным пользователям. Вот кусок кода с функциями авторизации:
<?php
// функция авторизации и сохранения куков
function post_content ($url,$postdata) {
$uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postdata));
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__)."/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__)."/cookie.txt");
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
// функция обращения к страницам после авторизации, используя сохраненные куки
function get_web_page( $url )
{
$uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
$ch = curl_init( $url );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 0); // не возвращает заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_USERAGENT, $uagent); // useragent
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // останавливаться после 10-ого редиректа
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__)."/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__)."/cookie.txt");
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
// так выглядит тело запроса:
// username=tronmarina&password=tronmarina&remember=yes&Submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&option=com_users&task=user.login&return=aW5kZXgucGhwP0l0ZW1pZD00MzU%3D&23b0f12487d33d530f63635857f2dd1e=1: undefined
$url = 'http://zelart.com.ua/';
$result = post_content( $url, array( // вызываем функцию авторизации с параметрами
'username'=>'tronmarina',
'password'=> 'tronmarina',
'remember' => 'yes',
'Submit' => '%D0%92%D0%BE%D0%B9%D1%82%D0%B8',
'option' => 'com_users',
'task' => 'user.login'));
$html = $result['content'];
echo $html;
?>
Конечно же я смотрел какие параметры передаются формой авторизации и куда, но кроме как логина и пароля, "запомнить меня", передаются еще какие то параметры...
Подскажите куда смотреть? Пробовал передавать только логин и пароль - не авторизирует, пробовал разные комбинации с тех других параметров - не помогает. Пробовал сначала открывать страницу, брать куки, потом снова заходить с этими куками и авторизироваться - не работает (или я что то не так делал...).