@pagemaster

PHP скрипт не авторизируется, какие параметры передавать?

Пишу небольшой парсер, который будет проходить по готовому списку ссылок на товары и брать оттуда актуальные цены, но проблема в том, что каталог закрытый и доступен только авторизированным пользователям. Вот кусок кода с функциями авторизации:
<?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;
?>


Конечно же я смотрел какие параметры передаются формой авторизации и куда, но кроме как логина и пароля, "запомнить меня", передаются еще какие то параметры...

Подскажите куда смотреть? Пробовал передавать только логин и пароль - не авторизирует, пробовал разные комбинации с тех других параметров - не помогает. Пробовал сначала открывать страницу, брать куки, потом снова заходить с этими куками и авторизироваться - не работает (или я что то не так делал...).
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
gromdron
@gromdron
Работаю с Bitrix24
Для того чтобы провести авторизацию необходимо сделать следующее:

1) Скачать страницу.
1.1) Нужно получить COOKIE, которые вернутся со страницей
1.2) Достать ВСЕ поля из формы (там передаются еще 2 доп. параметра, которых у тебя нет)
2) Отправить запрос с COOKIE, параметрами из п.1.2 на url авторизации (на ту же страницу с которой производил загрузку)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы