Добрый вечер . Не получается выполнить удаленный логин на сайт one-team.ru
(виртуальный футбольный менеджер). НЕ могу понять как правильно передать переменные
$url = 'http://one-team.ru/';
$urlTo = 'http://one-team.ru/modules/ajax.php';
$post = "obj=auth&action=OT_Auth¶m[name]=login¶m[pass]=pass¶m[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-запрос и получаются 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-кода.
Давай разбираться. Вот твой код.
$post = "obj=auth&action=OT_Auth¶m[name]=login¶m[pass]=pass¶m[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 запрос. Итог: удали их - должно работать.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей