Сегодня мы рассмотрим расширение 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.
В этом разделе мы построим реальные примеры для демонстрации различных функций 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.
В этом разделе мы рассмотрим, как размещать данные с помощью 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 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.
Давайте создадим файл 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
Прогнозы и тенденции PHP и Symfony в 2023 году
11984
599
Как проверить, вызывается ли страница с https или http в PHP?
13653
682
PSR: стандарты для современного PHP-разработчика
12464
623
Топ 10 PHP фреймворков
10828
541
PHP - серверный язык программирования
9684
484
Вопросы усиления безопасности при работе с расширением PHP Curl
15491
774