cURL PHP: что это такое и как им пользоваться?

cURL PHP: что это такое и как им пользоваться?

· PHP и Блог · 4 мин чтения

В этой записи, я покажу на примерах как пользоваться таким инструментом как cURL, где его применяют и почему вам стоит в нём разобраться, если вы уже это не сделали.

Где используют cURL PHP? Его можно применять для работы с API других сайтов, выполнять простые HTTP запросы и более сложные, например загрузок файлов с помощью FTP.

Мы в этой записи, посмотрим на простые GET/POST запросы и как их делать с помощь.

Важно знать

Настройка запроса 

  • CURLOPT_RETURNTRANSFER — вернуть ответ в виде строки, вместо того, чтобы показывать его сразу
  • CURLOPT_CONNECTTIMEOUT — сколько по времени ждать ответа
  • CURLOPT_TIMEOUT — сколько секунд будет выполняться cURL запрос
  • CURLOPT_USERAGENT — headers (заголовки) для запроса
  • CURLOPT_URL — URL куда будет отправлен запрос
  • CURLOPT_POST — отправить POST запрос
  • CURLOPT_POSTFIELDS — массив POST полей к запросу

Настройки выше используются для изменения параметров отправки запроса. Когда вы не задали никаких параметров для cURL, то у него «появляется куча вопросов».  Например: какой запрос вы хотите выполнить (GET/POST)? Сколько времени выделить на запрос? Куда он должен выполнять и другие подобные.

Другие используемые функции 

  • curl_init() — открывает сеанс cURL
  • curl_close() — закрывает сеанс cURL
  • curl_exec() — выполняет запрос

Функции выше используются для создания запроса, его запуска и закрытия.

PHP cURL GET

Для начала сделаем GET запрос.

// Для начала скажем, что мы хотим использовать cURL
$curl = curl_init();
// Определение параметров. Ссылку (куда будет делаться запрос) и headers (заголовки)
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://domain.ru/?param=one&param2=two',
    CURLOPT_USERAGENT => 'Sample of cURL'
]);
// Отправляем запрос и сохраняем ответ в $res
$res = curl_exec($curl);
// Закрываем запрос и удаляем инициализацию $curl
curl_close($curl);

В этом запросе мы создаем cURL, и указываем, что нужно вернут ответ со страницы в виде строки CURLOPT_RETURNTRANSFER (не выводя его на экран), указываем ссылку запроса CURLOPT_URL (куда он будет выполнен) и указываем USERAGENT заголовки (не обязательный параметр и его можно удалить). Далее отправляем запрос и получаем ответ. Закрываем cURL и вуаля — у вас теперь есть ответ в $res, который вы теперь можете вывести на экран с помощью echo $var или var_dump($res).

PHP cURL POST

Разница между GET и POST запросами — это синтаксиc для отправки. Для POST можно указать больше параметров, например, поля, которые будут отправляться. Допустим, вы хотите отправить форму на сайте куда делаете запрос, тогда в данном случае вам точно понадобиться POST.

// Для начала скажем, что мы хотим использовать cURL
$curl = curl_init();
// Определение прааметров. Ссылку (куда будет делаться запрос), какие заголовки будут у этого запроса, задаем, что запрос должен быть в формате POST и передаем параметры этого запроса в виде массива 'ключ' => 'значение'. 
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://testcURL.com',
    CURLOPT_USERAGENT => 'Codular Sample cURL Request',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => [
        'param1' => 'значение1',
        'param2' => 'значение2'
    ]
]);
// Отправляем запроса и сохраняем его в $res
$res = curl_exec($curl);
// Закрываем запрос и удаляем инициализацию $curl
curl_close($curl);

Процедура отправки этого запроса почти идентична тому, что было в GET за исключением двух дополнительных строчек. С помощью CURLOPT_POST мы говорим cURL о том, что хотим отправить POST запрос и затем прописываем параметры для отправки с CURLOPT_POSTFIELDS в виде массива (сначала имя параметра и затем его значение).

В случае, если вы хотите зарегистрироваться на сайте куда вы отправляете запрос и на нем из полей только три, допустим:  first_name (имя), last_name (фамилия), email (почта), тогда поля у вас будут выглядеть следующим образом:

CURLOPT_POSTFIELDS => [
    'first_name' => 'Bologer',
    'last_name' => 'Test',
    'email' => 'admin@bologer.ru'
]

Обратите внимание на то, что если на форме будет стоять капча (проверка на ботов), тогда зарегистрироваться автоматически не получится.

Похожие функции

Для отправки GET запросов так же подойдет file_get_contents() который делает запрос и возвращает то, что удалось получить.

Чем он плох?

  • На некоторых сайтах он заблокирован
  • Некоторые хостинги по умолчанию блокируют эту функцию, поэтому вам придется просить у них включить ее в общий список модулей
  • Мало настроек для отправки запросов. Например, нельзя делать POST запросы и передавать параметры.

Чем он хорош?

  • Проще чем cURL. Удобно пользоваться, например: file_get_contents('http://google.com')

Послесловие

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

Читать далее