PHP cURL
13187

PHP cURL


Сегодня мы рассмотрим расширение cURL в PHP, которое позволяет выполнять HTTP-запросы из вашего кода.

В повседневной работе над PHP вам часто приходится взаимодействовать с внешними веб-сайтами. Будь то вызов сторонних REST API для получения данных или загрузка ресурсов с внешнего сайта, вам нужна библиотека, которая позволит вам сделать это без особых усилий.

В PHP существуют различные методы, которые вы можете использовать для подключения и взаимодействия с различными типами серверов. Одним из самых простых способов является использование функции file_get_contents для чтения удаленных файлов. С другой стороны, вы также можете использовать сокеты для реализации взаимодействия клиент-сервер. Однако в этой статье мы подробно рассмотрим расширение cURL с реальными примерами.

cURL расшифровывается как client URLs, и это библиотека, которая позволяет вам отправлять и получать информацию с помощью синтаксиса URL. Фактически, она использует библиотеку libcurl, созданную Даниэлем Стенбергом, которая позволяет вам подключаться и общаться со многими различными типами серверов с помощью многих различных типов протоколов. Помимо HTTP и HTTPS, библиотека libcurl также поддерживает такие протоколы, как FTP, Gopher, Telnet, DICT, File и LDAP.

Начиная со следующего раздела, мы рассмотрим несколько реальных примеров, чтобы продемонстрировать, как вы можете использовать функции cURL в PHP.

Реальные примеры php cURL


В этом разделе мы построим реальные примеры для демонстрации различных функций cURL в PHP.

Как скачивать файлы с помощью cURL в PHP

Чтение или загрузка удаленных файлов является одним из наиболее распространенных вариантов использования cURL. Это достигается с помощью запроса cURL GET, который мы рассмотрим в этом разделе.

Создайте файл curl_read_file.php со следующим содержимым.

$url = 'https://www.example.com';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);

$data = curl_exec($curl);

curl_close($curl);

В приведенном выше примере мы использовали функции cURL для чтения домашней страницы домена example.com. Давайте пройдемся по важным фрагментам, чтобы понять, как это работает.

Во-первых, мы использовали функцию curl_init для инициализации новой сессии cURL. В переменной $curlHandle хранится хэндл cURL, который мы можем использовать для установки различных опций для передачи cURL с помощью функции curl_setopt.

Когда вы работаете с cURL, функция curl_setopt - это та функция, с которой вы будете иметь дело в основном, поскольку она позволяет вам инициализировать различные опции запроса CURLOPT_*. Функция curl_setopt принимает три аргумента: хэндл cURL, опцию CURLOPT_XXX и значение опции CURLOPT_XXX.

Далее мы использовали параметр CURLOPT_URL, чтобы установить URL запроса на example.com с помощью функции curl_setopt. Далее, мы установили опцию CURLOPT_RETURNTRANSFER в TRUE, поскольку мы хотим инициализировать ответ в переменной $responseData. Если мы не установим это значение в TRUE, ответ будет отображаться непосредственно на экране. Наконец, мы установили опцию CURLOPT_HEADER в FALSE, чтобы пропустить информацию заголовка в выводе.

Наконец, мы использовали функцию curl_exec для выполнения запроса cURL. Если все прошло нормально, переменная $responseData должна содержать источник главной страницы сайта example.com.

Как опубликовать (передать методом POST) данные с помощью cURL в PHP

В этом разделе мы рассмотрим, как размещать данные с помощью cURL.

Создадим файл curl_post_example.php со следующим содержимым.

$url = '{POST_REST_ENDPOINT}';

$curl = curl_init();

$fields = array(
    'field_name_1' => 'Значение 1',
    'field_name_2' => 'Значение 2',
    'field_name_3' => 'Значение 3'
);

$fields_string = http_build_query($fields);

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);

$data = curl_exec($curl);

curl_close($curl);

В приведенном выше примере мы предполагаем, что нам нужно отправить запрос методом HTTP POST. Фактически, это работает аналогично отправке формы методом POST.

Переменная $fields содержит массив значений, которые нам нужно отправить в качестве данных POST. Далее мы использовали функцию http_build_query для подготовки строки запроса в URL-encoded.

Далее мы установили опцию CURLOPT_POST в TRUE, чтобы установить метод запроса HTTP POST. Далее нам нужно использовать опцию CURLOPT_POSTFIELDS, чтобы установить данные POST, которые мы хотим отправить вместе с запросом.

Наконец, мы использовали функцию curl_exec для выполнения запроса cURL. Таким образом, вы можете выполнить запрос cURL POST.

Как отправить данные в формате JSON с помощью cURL в PHP

Чаще всего вам нужно отправить данные в формате JSON в запросе cURL POST. В этом разделе мы рассмотрим, как можно отправить данные JSON методом POST в запросе cURL.

Поскольку это POST-запрос, давайте пересмотрим пример, который мы только что обсуждали в предыдущем разделе. Создайте файл curl_post_json.php со следующим содержимым.

$url = '{POST_REST_ENDPOINT}';

$curl = curl_init();

$fields = array(
    'field_name_1' => 'Значение 1',
    'field_name_2' => 'Значение 2',
    'field_name_3' => 'Значение 3'
);

$json_string = json_encode($fields);

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_string);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true );

$data = curl_exec($curl);

curl_close($curl);

Хотя это может выглядеть похоже на пример в предыдущем разделе, важно то, что мы использовали функцию json_encode для создания строки JSON из массива $fields.

Далее, мы использовали опцию CURLOPT_HTTPHEADER для установки заголовка Content-Type в application/json, чтобы сообщить серверу API, что мы отправляем данные в формате JSON. Заголовок Content-Type полезен для отправки данных в различных форматах. Например, если вы хотите отправить данные в формате XML, вам придется установить заголовок Content-Type в application/xml.

За исключением этого, он практически такой же, как и у обычного запроса POST. Таким образом, вы можете отправлять различные типы данных, задавая соответствующий заголовок Content-Type. Если вы не установите заголовок Content-Type, в качестве значения по умолчанию будет использоваться application/x-www-form-urlencoded.

Как загружать файлы с помощью cURL в PHP

В этом разделе мы обсудим, как можно загружать файлы с помощью cURL.

Давайте создадим файл curl_post_file.php со следующим содержимым.

$url = '{POST_REST_ENDPOINT}';

$curl = curl_init();

if (function_exists('curl_file_create')) {
  $fileAttachment = curl_file_create('/absolute/path/to/file/');
} else {
  $fileAttachment = '@' . realpath('/absolute/path/to/file/');
}

$fields = array(
    'field_name_1' => 'Значение 1',
    'field_name_2' => 'Значение 2',
    'field_name_3' => 'Значение 3',
    'uploaded_file' => $fileAttachment
);

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);

$data = curl_exec($curl);

curl_close($curl);

Когда вы хотите загрузить файл, вам необходимо в первую очередь создать объект CURLFile. Начиная с версии PHP 5.5+, создать его довольно просто, поскольку для создания объекта CURLFile достаточно использовать функцию curl_file_create. Первым аргументом функции curl_file_create является абсолютный путь к файлу, который вы хотите загрузить.

Если вы все еще используете старую версию PHP, что не рекомендуется, мы использовали синтаксис fallback '@' . realpath('/absolute/path/to/file/') для создания ссылки на файл.

Наконец, мы установили для заголовка Content-Type значение multipart/form-data, поскольку это будет POST-запрос с многокомпонентной формой. Кроме этого, это обычный cURL POST запрос.

При работе с расширением cURL также важно уделять большое значение вопросам безопасности, которые подробно рассмотрены в статье Вопросы усиления безопасности при работе с расширением PHP cURL