Answer the question
In order to leave comments, you need to log in
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
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;
?>
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.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question