cURL — очень мощный инструмент, который позволяет передавать данные с помощью различных протоколов. Очень часто его используют для передачи данных между веб-сайтами. Как пример таких запросов можно привести взаимодействие с API или oAuth.
сURL безграничен в своих возможностях, начиная от базовых HTTP запросов, продолжая передачей данных через протокол FTP и т.д. Список протоколов, с которыми работает cURL: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP.
В этой статье мы рассмотрим разницу между передачей запроса методом GET и POST, разберем как работать с ответом и рассмотрим несколько частно используемых параметров
Основы
Перед тем, как отправить cURL запрос — нам следует создать сеанс. Сделать это можно при помощи функции curl_init( $url );
Данная функция принимает один параметр — url, который будет загружен. Но url можно будет установить позже, по этому данный параметр не обязателен.
$curl = curl_init();
Настройки
Параметры cURL нужны для того, чтобы более точно сконфигурировать Ваш запрос. С помощью параметров можно получить те самые, почти безграничные, возможности работы с запросами.
После того, как ресурс создан, можно приступить к настройке параметров запроса. Для этого мы можем пользоваться функцией curl_setopt ( $ch , $option , $value )
, которая принимает три обязательных параметра:
- $ch — ссылка на ресурс cURL
- Параметр, который мы устанавливаем
- Значение параметра
Ниже приведен список часто используемых параметров, а их полный список можно просмотреть в документации php.
Параметр | Описание |
CURLOPT_RETURNTRANSFER | Возвращает ответ как строку (если передать true), вместо вывода на экран |
CURLOPT_CONNECTTIMEOUT | Позволяет задать количество секунд для ожидания соединения. |
CURLOPT_TIMEOUT | Задает количество секунд, которые будет выполняться запрос. |
CURLOPT_USERAGENT | Содержимое заголовка «User-Agent: «, посылаемого в HTTP-запросе. |
CURLOPT_URL | URL, куда будет отправлен запрос. |
CURLOPT_POST | true, если нужно отправить POST запрос |
CURLOPT_POSTFIELDS | Массив параметров для POST запроса |
Как задавать параметры
Как описывалось выше, параметры можно задавать при помощи метода curl_setopt
. Давайте разберем несколько примеров:
Пример 1: Установим значение URL, куда будет отправлен запрос:
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://testcURL.com');
К слову, установить этот параметр можно в одну строку при инициализации ресурса:
$curl = curl_init('http://testcURL.com');
Пример 2: Установим время выполнения запроса в 10 секунд:
$curl = curl_init(); curl_setopt($curl, CURLOPT_TIMEOUT, 10);
Альтернативный способ задавать настройки
Настройки можно задать при помощи функции curl_setopt_array($ch, $array)
, первый параметр которой — ссылка на ресурс cURL, второй — ассоциативный массив, где ключами выступают константы параметров.
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://testcURL.com' ));
Отправка запроса cURL
Как написано выше, при помощи cURL можно отправлять различные запросы. В данной статье мы рассмотрим варианты отправки GET и POST запросов.
Отправить GET запрос
GET запрос используется по умолчанию. Как вы увидите в примере ниже, он достаточно прост для понимания.
Если есть необходимость использовать параметры, их можно просто перечислить в url: http://testsite.com/?param=value¶m2=value2
Отправим простой GET запрос с параметрами:
// Инициализация ресурса curl $curl = curl_init(); // Параметры отправки запроса (мы добавили useragent) curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://testsite.com/?param=value¶m2=value2', CURLOPT_USERAGENT => 'ctrlv cURL Request' )); // Отправка запроса; ответ будет в $response $response = curl_exec($curl); // Завершение работы с cURL curl_close($curl);
Отправка POST запроса
Синтаксис для GET и POST запросов немного отличается. В случае, если запрос не содержит параметров, разница будет только в параметре CURLOPT_POST (в POST этот параметр устанавливаем в true или 1). Если необходимо передавать параметры POST запроса, дополнительно указываем параметр CURLOPT_POSTFIELDS (массив, где название параметра — ключ массив).
В данном примере отправляется тот-же запрос, который рассматривался в выше, отличается лишь метод отправки.
// Инициализация ресурса curl $curl = curl_init(); // Параметры отправки запроса (мы добавили useragent) curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://testsite.com', CURLOPT_USERAGENT => 'ctrlv cURL Request', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => array( param => 'value', param22 => 'value2' ) )); // Отправка запроса; ответ будет в $response $response = curl_exec($curl); // Завершение работы с cURL curl_close($curl);
Завершение запроса
Скорее всего, вы обратили внимание на строку curl_close($curl);, которой завершаются оба примера. Данная строка необходима для того, чтобы завершить сеанс работы с cURL, ресурс $curl, инициализация которого происходит в первой строке — уничтожается.
Реальные примеры использования cURL
Давайте рассмотрим реальный пример отправки cURL запроса на языке php. Предлагаю подключиться к публичному API приватбанка и узнать курс валют на сегодня:
Код для этого примера будет выглядеть примерно следующим образом:
$url = 'https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5'; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => $url, CURLOPT_USERAGENT => 'ctrlv cURL Request', )); $response = curl_exec($curl); curl_close($curl); // конвертируем ответ от сервера в обьекты php // так с ними проще работать $json_response = json_decode($response); foreach ($json_response as $currency_obj) { echo "Курс $currency_obj->base_ccy по отношению к $currency_obj->ccy: \n покупка - $currency_obj->buy \n продажа - $currency_obj->buy" . PHP_EOL . PHP_EOL; }
В данном примере мы получили ответ $response и обработали на нашей стороне, выведя информацию о курсах в удобочитаемом формате.
Пример выше выведет на экран следующее:
Курс UAH по отношению к USD: покупка - 26.80000 продажа - 26.80000 Курс UAH по отношению к EUR: покупка - 30.30000 продажа - 30.30000 Курс UAH по отношению к RUR: покупка - 0.39000 продажа - 0.39000 Курс USD по отношению к BTC: покупка - 3638.3813 продажа - 3638.3813