Удаленная авторизация на сайте PHP CURL

409
08 мая 2017, 03:00

Добрый вечер . Не получается выполнить удаленный логин на сайт one-team.ru (виртуальный футбольный менеджер). НЕ могу понять как правильно передать переменные $url = 'http://one-team.ru/';
$urlTo = 'http://one-team.ru/modules/ajax.php';

$post = "obj=auth&action=OT_Auth&param[name]=login&param[pass]=pass&param[type]=1";  
$ch = curl_init();                            
curl_setopt($ch, CURLOPT_URL, $url);           
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$html = curl_exec($ch);                         
curl_setopt($ch, CURLOPT_URL, $urlTo);              
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');  
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_POST, true);               
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);       
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);    
curl_setopt($ch, CURLOPT_URL, "http://one-team.ru/stadium/lookup/873648");
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
$result = curl_exec($ch); 

$html = curl_exec($ch);     
curl_close($ch);        
echo $result; 
Answer 1

В подобных вашему случаях сначала делается авторизация (где передается POST-запрос и получаются Cookies), после чего уже с помощью полученных Cookies делаются запросы от имени авторизованного пользователя.

Вы в первом CURL-запросе просто получаете HTML, а во-втором пытаетесь передать на адрес "http://one-team.ru/stadium/lookup/873648" GET-запрос. Удалите строчки:

curl_setopt($ch, CURLOPT_URL, "http://one-team.ru/stadium/lookup/873648");
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");

Они переопределяют уже указанные настройки CURL.

Попробуйте для начала поэкспериментировать со своим собственным сайтом. Чтобы хотя бы он выдавал правильные ответы (т.к. в вашем коде целый ряд ошибок и непонятных моментов). Когда на этом этапе все будет OK, то можно тестировать на указанном вами сайте.

Но и здесь может быть не все так просто. Может стоять защита от парсинга данных. Например, данные выдаются только при прохождении проверки User Agent. Также могут стоять ограничения на частоту запросов за единицу времени, периодически вываливаться capcha или выполняться проверка с использованием JS-кода.

Answer 2

Давай разбираться. Вот твой код.

$post = "obj=auth&action=OT_Auth&param[name]=login&param[pass]=pass&param[type]=1";  
$ch = curl_init();                            
curl_setopt($ch, CURLOPT_URL, $url);           
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$html = curl_exec($ch);                         
curl_setopt($ch, CURLOPT_URL, $urlTo);              
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');  
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_POST, true);               
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);       
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);    

Всё нормально, всё нормально.. Потом бац.. Тут ты неожиданно ломаешь структурку, которую до этого заполнил верно.

curl_setopt($ch, CURLOPT_URL, "http://one-team.ru/stadium/lookup/873648");
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");

Ну а дальше используешь уже сломанную структурку.

$result = curl_exec($ch); 

$html = curl_exec($ch);     
curl_close($ch);        
echo $result; 

Т.е. другими словами ты делаешь всё правильно post запрос. А те три строчки, сбивают его и переписывают на get запрос. Итог: удали их - должно работать.

READ ALSO
Как парсить информацию с другого сайта, заполняя там поля?

Как парсить информацию с другого сайта, заполняя там поля?

Есть сайт университета и на нем есть расписание пар(http://bseuby/schedule/), так вот хотелось бы парсить это расписание себе на сайт, а там просто для...

336
Using hunspell program in c++ project [требует правки]

Using hunspell program in c++ project [требует правки]

My goal is to write a c++ project, that will be able to use hunspell functionsI'm not that good of a programmer yet, but I am trying

263
Что такое атрибуты в C++?

Что такое атрибуты в C++?

Начиная со стандарта c++11 в языке появились так называемые "атрибуты", что это такое и зачем они нужны?

417
QTableView отображение изображения

QTableView отображение изображения

Допустим есть класс BookВ нем хранится описание книги и QImage

424