O
O
Oleg Dyachenko2016-06-28 18:34:12
PHP
Oleg Dyachenko, 2016-06-28 18:34:12

Curl can't login, what's wrong?

Good evening.
Can't login using cURL. It seems like I'm doing everything right, but it still won't let me.
Here is the site - www.vezetvsem.ru/listing Here is the authorization form - https://auth.vezetvsem.ru/auth/login
There are no hidden fields. Login/password is correct. For the test, you can use these: Login: [email protected] Pass: w33q5u8t
After working out the code, we get the code from an unauthorized page.
UPD: I was caught here that I want to get someone else's human labor for free and send me to freelance exchanges.
No. I would like to understand what is wrong. Why is this code not working.

<?
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,"[email protected]","w33q5u8t");

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

echo $page;
?>

Answer the question

In order to leave comments, you need to log in

3 answer(s)
O
Oleg Dyachenko, 2016-06-29
@OLDJman

Here is the correct solution.
The error was in the Read() function, a useragent other than the login() function was specified.
In the new solution, the Read() function has been replaced by 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;

?>

D
Dmitry, 2016-06-28
@slo_nik

Doesn't it bother you that when you go to the login page, two POST requests are made?
And when you execute curl, these requests are not executed, they return 404
Look in the debugger
And you need to check, in the same debugger that the server returns in the headers.
Look carefully.

S
Sombro, 2016-07-06
@Sombro

Try to ask [email protected] , they will surely help you!

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question