Curl, открыть другую страницу после авторизации?

usergeyv

Знаток
Регистрация
5 Июл 2013
Сообщения
152
Реакции
25
Вот такой запрос:
PHP:
$login = 'nick';
$password = 'password';
$url = 'http://site.ru/users.php?login'; // Страничка, на которую посылаем ajax-запросы


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt ($ch, CURLOPT_VERBOSE, 2); // Отображать детальную информацию о соединении
curl_setopt ($ch, CURLOPT_ENCODING, 0); // Шифрование можно включить, если нужно
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0'); //Прописываем User Agent, чтобы приняли за своего
curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookie.txt"); // Сюда будем записывать cookies, файл в той же папке, что и сам скрипт
curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_FAILONERROR, 1);
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt ($ch, CURLOPT_COOKIE, "cookie1=1;cookie2=2"); //Устанавливаем нужные куки в необходимом формате
curl_setopt($ch, CURLOPT_POSTFIELDS, "nick=$login&password=$password"); //Устанавливаем значения, которые мы передаем через POST на сервер в нужном формат
curl_setopt($ch, CURLOPT_URL, $url);
echo $res = curl_exec($ch);
curl_close($ch);
Удачно авторизовались , куки в файл записаны, далее мне нужно перейти по ссылке Для просмотра ссылки Войди или Зарегистрируйся используя получены данные выше, какое решения, прошу показать на примере готового кода
 
Последнее редактирование:
Сделать вот так, работает
PHP:
$login = 'nick';
$password = 'password';
$url = 'http://site.ru/users.php?login'; // Страничка, на которую посылаем ajax-запросы
$url2 = "http://site.ru/download/620108";
function auth($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt ($ch, CURLOPT_VERBOSE, 2); // Отображать детальную информацию о соединении
curl_setopt ($ch, CURLOPT_ENCODING, 0); // Шифрование можно включить, если нужно
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)'); //Прописываем User Agent, чтобы приняли за своего
curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookie.txt"); // Сюда будем записывать cookies, файл в той же папке, что и сам скрипт
curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_FAILONERROR, 1);
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt ($ch, CURLOPT_COOKIE, "cookie1=1;cookie2=2"); //Устанавливаем нужные куки в необходимом формате
curl_setopt($ch, CURLOPT_POSTFIELDS, "nick=$login&password=$password"); //Устанавливаем значения, которые мы передаем через POST на сервер в нужном формат
curl_setopt($ch, CURLOPT_URL, $url);
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
function browser($url) {
    $user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/cookie.txt';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);
    curl_setopt($ch, CURLOPT_COOKIEJAR,  $user_cookie_file);
    $html = curl_exec($ch);
    curl_close($ch);
    return $html;
}
auth($url);
echo browser($url2);

а теперь, мне нужно узнать есть ли возможность не проходить каждый раз авторизацию при обращении к скрипту, а использовать ранние получены куки и проверять их на работоспособность перед используваниям?
 
Последнее редактирование:
Создаешь 2 функции
is_login(), login().
В login() логи примерно такая:
вызываешь is_login() - если вернула true то лазишь по сайту, false знач логинишся и после лазишь по сайту.
в is_login() пишешь логику примерно такую:
переходишь по нужному урлу, парсиш DOM на наличие какого нибудь элемента (когда ты залогинен) -если есть возвращаешь true , если нет false.
Вообще если не поймешь то напиши я гляну у меня где-то есть такой класс я писал для авторизации в Wordpress.
 
1. Подключаешь Для просмотра ссылки Войди или Зарегистрируйся

Там есть Request::session(), можешь путь сам настроить, можешь в директории со скриптом создать папку request.

PHP:
require_once 'request.php';

$url = 'http://site.ru/users.php?login';

$data = array(
    'nick' => 'Vasya',
    'password' => 'Ad30dk'
);

$request = new request($url);
$request->post($data);
$request->session('tot_samiy_sait');
$request->send();

echo $request->dump();

/*
    Далее просто используешь ту же сессию
*/

$new_url = 'http://site.ru/catalog';

$request = new request($new_url);
$request->session('tot_samiy_sait');
$request->send();

echo $request->dump();

Ты понаписал кучу кода, в котором сам путаешься. В первом коде ты 2 раза одну строчку написал, там где установка $url.

Проверка как и написано выше, путем проверки элементов на странице, которые отличаются у авторизованных и не авторизованных
 
Там есть Request::session(), можешь путь сам настроить, можешь в директории со скриптом создать папку request.
почему пишет
PHP:
Warning: mkdir(): No such file or directory in /home/admin/web/site.ru/public_html/request.php on line 165
 
Назад
Сверху