Авторизация Curl на конкретном примере

sonya2003

Создатель
Регистрация
6 Окт 2007
Сообщения
25
Реакции
2
Необходимо авторизоваться на сайте, для дальнейшего парсинга прайса товаров. После выполнения скрипта файл с куками содержит
xamillion.com FALSE / FALSE 0 PHPSESSID b6ea0t74ju45suk73f14l87j43, т.е как я поняла куки не передались. Произошла ли авторизация также под вопросом, так как выводит кракозябры. Помогите разобраться, пожалуйста!!!
PHP:
<?php

function curl_get($url, $referer='http://www.google.com', $post, $headers) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)");
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/parse/cooks.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/parse/cooks.txt');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
     $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

    $post = [
        'login' => 'mail@mail.ru',
        'password' => 'qwerty',
        'log' => ''
        ];

    $headers = [
'Host: site.com',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:47.0) Gecko/20100101 Firefox/47.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: ru,en-US;q=0.7,en;q=0.3',
'Content-Type: application/x-www-form-urlencoded',
'Connection: keep-alive'
        ];

$html = curl_get('http://site.com/login/', 'http://site.com/catalog/', $post, $headers);

echo '<pre>';
print_r($html);
echo '</pre>';
 
?>
 
Последнее редактирование:
Соня (судя по нику, тебя так зовут :) ), ты не с той стороны заходишь...

Для начала - никогда не публикуй логины/пароли! Без комментариев...

Во-вторых, ты заходишь не с той стороны. Открой отладку браузера и посмотри - а что мы передаём сайту и что он передаёт нам в ответ?
К примеру DLE достаточно передать md5 пароля и user_id в куке.

Теперь о кодировках... Прости, а что ты хотела увидеть, добавив вот такой параметр:
'Accept-Encoding: gzip, deflate',
Конечно тебе всё в gzip и приходит... Убирай - увидишь красивую картинку
 
Спасибо за ответ. Логин и пароль опубликованы целенаправлено для конкретики разбора, аккаунт не настоящий, для экспериментов. Accept-Encoding убрала, страница стала отображаться, но происходит редирект на страницу с неавторизованным каталогом. Через отладку посмотрела: форма на странице login посылает post-запрос с логином и паролем, возвращается 302 редирект на страницу с каталогом.
Вопрос: почему не возвращаются куки и не происходит авторизация...
 
в заголовки попробуй "Content-Type: application/x-www-form-urlencoded"
в данный момент негде протестировать сам код и сырой ответ.

Server: nginx/1.9.12Date: Tue, 09 Aug 2016 10:28:37 GMTContent-Type: text/htmlTransfer-Encoding: chunkedConnection: keep-aliveKeep-Alive: timeout=10Vary: Accept-EncodingX-Powered-By: PHP/5.2.17-pl0-gentooSet-Cookie: PHPSESSID=3u7grl5a1n76smhgvli9oogei7; path=/Expires: Thu, 19 Nov 1981 08:52:00 GMTCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0Pragma: no-cache
 
Добавила в заголовки Content-Type: application/x-www-form-urlencoded, без изменений... :confused:
 
Через отладку посмотрела: форма на странице login посылает post-запрос с логином и паролем, возвращается 302 редирект на страницу с каталогом.
Опять не туда смотришь в отладке.

У тебя создаются куки и тебе надо посмотреть как. Если куки создаются вида user_id, который не меняется и хеш пароля - не надо вообще заморачиваться с авторизацией - отправляйте готовые куки.
Я очень сомневаюсь что сайт такого уровня будет заморачиваться шифрованием сессий.
 
Я очень сомневаюсь что сайт такого уровня будет заморачиваться шифрованием сессий.
так и есть у него есть session id и видимо где-то в базе он хранит привязку пользователь-сессия
но авторизация не происходит если через курл и редирект у меня например, либо где-то я туплю
Expires: Thu, 19 Nov 1981 08:52:00 GMT


Код:
HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Server: nginx/1.9.12
Date: Tue, 09 Aug 2016 13:34:37 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=10
Vary: Accept-Encoding
X-Powered-By: PHP/5.2.17-pl0-gentoo
Set-Cookie: PHPSESSID=i8unjea0im3qqdut291dr6prm4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

удалось)) сейчас доеду до дома с работы и отпишу код когда причешу его
2m4rrkz.jpg
 
Последнее редактирование модератором:
У тебя создаются куки и тебе надо посмотреть как.

А я хотела, чтобы куки не я выковыривала, а их сохранил curl, и подгружал их в дальнейшем при парсинге, ведь я прописала это ему, почему он не сохраняет их, на других сайта все получалось, почему проблемы на этом. Если конечно невозможно их достать курлом, придётся как-то самой, но в чем причина, не пойму.

но авторизация не происходит если через курл и редирект у меня например, либо где-то я туплю

Т.е. курлом авторизоваться не получиться :conf:
 
Последнее редактирование модератором:
Т.е. курлом авторизоваться не получиться :conf:
уже получилось смотри мой скрин под спойлером
Сейчас причешу код и пришлю

поправьте путь к кукам и проверяйте

PHP:
<?php

$useragent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36';
$login_url='http://xamillion.com/login/';
$headers=array(
'Host: xamillion.com',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language:     ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
//'Accept-Encoding: gzip, deflate',
'Connection: keep-alive',
//'Content-Type: application/x-www-form-urlencoded'
);

function curl_login($login_url,$post,$headers,$useragent,$referer='http://www.google.com'){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $login_url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    // curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, '/var/www/gerrove/data/www/gerrove.ru/test/cook.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/gerrove/data/www/gerrove.ru/test/cook.txt');
    //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $data = curl_exec($ch);
   
    return $ch;
}

$post = array(
'login' => 'buhelp@mail.ru',
'password' => 'qwerty',
'log' => ''
);


function curl_get($url,$headers,$ch,$referer='http://www.google.com') {
curl_setopt($ch, CURLOPT_URL, 'http://xamillion.com/catalog/');
curl_setopt($ch, CURLOPT_POST, false);
//curl_setopt($ch, CURLOPT_COOKIESESSION, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, "");
curl_setopt($ch, CURLOPT_COOKIEJAR, '/somepath/cook.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, '/somepath/cook.txt');
$answer = curl_exec($ch);
print $answer;
curl_close($ch);
}

$ch2=curl_login($login_url,$post,$headers,$useragent);
curl_get($headers,$headers,$ch2);


exit;
 
Последнее редактирование модератором:
Работает!!! Завтра буду разбирать код, на первый взгляд ошибка была в том, что выводили через curl_exec страницу с формой авторизации, она редиректилась и авторизация слетала. Но куки в файл по-прежнему не выгружаются, поэтому как я понимаю нужно будет проводить авторизацию через curl перед открытием каждой парсингуемой страницы.
 
Назад
Сверху