OLDJman
@OLDJman

Curl не может авторизоваться, в чем ошибка?

Добрый вечер.

Не получается с помощью cURL пройти авторизацию. Вроде все верно делаю, а все равно не пускает.

Вот сайт - www.vezetvsem.ru/listing Вот форма авторизации - https://auth.vezetvsem.ru/auth/login

Скрытых полей нет. Логин/пароль верные. Для теста можно пользовать эти: Login: 6kp5228wi4@kismail.ru Pass: w33q5u8t

После отработки кода, получаем код с неавторизованной страницы.

UPD: Меня тут уличили что я на халяву хочу чужой человеческий труд получить и посылают на фриланс биржи.
Нет. Хочется понять в чем ошибка. Почему этот код не работает.
<?
function login($url,$login,$pass){

   $ch = curl_init();
   if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https
  //моя вставка
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
  //моя вставка
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
   }
   curl_setopt($ch, CURLOPT_URL, $url);
   // откуда пришли на эту страницу
   curl_setopt($ch, CURLOPT_REFERER, $url);
   // cURL будет выводить подробные сообщения о всех производимых действиях
   curl_setopt($ch, CURLOPT_VERBOSE, 1);
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_POSTFIELDS,"username=".$login."&password=".$pass);
   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36");
   curl_setopt($ch, CURLOPT_HEADER, 1);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

  
   //сохранять полученные COOKIE в файл
   curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
   $result=curl_exec($ch);


   // Убеждаемся что произошло перенаправление после авторизации
   if(strpos($result,"Location: home.php")===false) die('Login incorrect');

   curl_close($ch);

   return $result;
}

// чтение страницы после авторизации
function Read($url){
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_COOKIESESSION, true);
   // откуда пришли на эту страницу
   curl_setopt($ch, CURLOPT_REFERER, $url);
   //запрещаем делать запрос с помощью POST и соответственно разрешаем с помощью GET
   curl_setopt($ch, CURLOPT_POST, 0);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   //отсылаем серверу COOKIE полученные от него при авторизации
   curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");

   $result = curl_exec($ch);

   curl_close($ch);

   return $result;
}



$urlAut = "https://auth.vezetvsem.ru/auth/login";

login($urlAut,"6kp5228wi4@kismail.ru","w33q5u8t");

$page = Read("http://www.vezetvsem.ru/listing");

echo $page;
?>
  • Вопрос задан
  • 1558 просмотров
Решения вопроса 1
OLDJman
@OLDJman Автор вопроса
Вот верное решение.
Ошибка была в функции Read(), указан отличный от функции login() useragent.
В новом решении функция Read() была заменена mainParser

<?
function login($url,$login,$pass){

   $ch = curl_init();
   if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
   }
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_COOKIESESSION, true);
   // откуда пришли на эту страницу
   curl_setopt($ch, CURLOPT_REFERER, $url);
   // cURL будет выводить подробные сообщения о всех производимых действиях
   curl_setopt($ch, CURLOPT_VERBOSE, 1);
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_POSTFIELDS,"username=".$login."&password=".$pass);
   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36");
   curl_setopt($ch, CURLOPT_HEADER, 1);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   //сохранять полученные COOKIE в файл
   curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookievezetvsem.txt');
   $result=curl_exec($ch);

   curl_close($ch);

   return $result;
}

function mainParser( $url )// парсер с кукисами
{
 
  $ch = curl_init( $url );
 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   // возвращает веб-страницу
  curl_setopt($ch, CURLOPT_COOKIESESSION, true);
  curl_setopt($ch, CURLOPT_HEADER, 0);           // не возвращает заголовки
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);   // переходит по редиректам
  curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36");  // useragent
  curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookievezetvsem.txt'); //хотя тут скорей всего он не записывает, а после каждого прохода вновь обращается к этому файлу 
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
  curl_setopt($ch, CURLOPT_TIMEOUT, 120);        // таймаут ответа
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);       // останавливаться после 10-ого редиректа
  
 
  $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;
}


$urlAut = "https://auth.vezetvsem.ru/auth/login";
login($urlAut,"XXX","XXX");

$result = mainParser("http://www.vezetvsem.ru/listing");
$page = $result['content'];

echo $page;

?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега PHP
Вас не смущает то, что при переходе на страницу входа выполняются два POST запроса?
А когда выполняете curl, то эти запросы не выполняются, возвращают 404
Посмотрите в дебагере
И проверить надо, в том же дебагере, что возвращает в заголовках сервер.
Смотрите внимательней.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы