Задать вопрос
FitTech
@FitTech

Best practices по cUrl в php?

Здравствуйте! С cUrl в php знаком давно, но практики мало, в основном задачи были просто открыть страницу и получить нужный html. Но сейчас появились задачи в которых нужно, например, на сайте с помощью cUrl пройти авторизацию чтобы дальше с сайтом работать. И у каждого сайта по своему реализована система входа.
Как в общем правильно авторизоваться на сайте с помощью cUrl? Подскажите, пожалуйста, хотя бы "на пальцах".
Например, как я понимаю, нужно сначала зайти просто на сайт с помощью cUrl, получить куки которые мне дали, потом уже с этими куки отправлять логин и пароль?
  • Вопрос задан
  • 278 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
m0pfin
@m0pfin
Писал функция для авторизации на сайте, и парсингом нужного значения с кабинета, если разберешься пригодится:
P.S. использовал библиотеку PhpQuery
/**
 * Функция для прасинга с авторизацией
 * @param $url - ссылка на сайт
 * @param $post - POST запрос для авторизации
 * @param string $pattern - шаблон для регулярки
 * @param string $url_page - ссылка куда нужно перейти после авторизации в кабинете, если нужное нам значение нет на главной ( не обязательное поле)
 * @param string $referer - реферер откуда пришли (необязательное поле)
 * @return mixed|string
 */

function curl_get($url, $post, $pattern = "", $url_page = '', $referer = 'https://google.com'){
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_COOKIEFILE, "/lead.txt"); // Куда записывать куки
    curl_setopt($ch, CURLOPT_COOKIEJAR, str_replace("\\", "/", getcwd()).'/lead.txt');

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_ENCODING , "gzip");

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");
    curl_setopt($ch, CURLOPT_REFERER, $referer); // Говорим откуда пришли REFERER

    curl_setopt($ch, CURLOPT_URL, $url); // Переходим по нашему URLу
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Отправляем наши POST данные
    $sess_cookie=substr($data, strpos($data, "PHPSESSID=")+10, 32);

    curl_setopt($ch, CURLOPT_COOKIE, $sess_cookie);
    $data = curl_exec($ch);

//Если после авторизации нужно перейти на определенную страницу проверяем нужно ли перейти или нет
    if($url_page != ''){ 
        curl_setopt($ch, CURLOPT_URL, $url_page);
        $data = curl_exec($ch);

    }

    //Извлекаем баланс
    $document = phpQuery::newDocument($data);
    $str = $document;
    preg_match_all($pattern, $str, $arr);
    $data = implode(”, $arr[1]);

    curl_close($ch);
    phpQuery::unloadDocuments($document);
    return $data;
}

    /**
     * Парсим баланс
     */

    $referer = 'https://site.pro';
    $post = "mail=test%40gmail.com&pass=testtest"; // POST запрос при авторизации
    $pattern = "#<b>(.+?)</b>#is"; // Шаблон для регулярки чтобы выбрать нужное значение

    $balance = curl_get('https://auth.site.pro/login', $post, $pattern); // используем функцию
    echo $balance; // Выводим на экран
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы