Curl init: примеры (PHP)
curl_init(string $url = null): CurlHandle|falseОсновы функции curl_init в PHP
Функция curl_init инициализирует сеанс библиотеки cURL (Client URL). Она применяется для взаимодействия с различными серверами по множеству протоколов, включая HTTP, HTTPS, FTP, SFTP.
Основное использование - отправка HTTP-запросов (GET, POST, PUT, DELETE) к удаленным серверам, загрузка файлов, работа с API, парсинг веб-страниц.
Функция принимает один необязательный аргумент:
url(string | null) - URL-адрес, с которым будет работать сеанс cURL. Если переданnullили опущен, сеанс создается без начального URL, который можно установить позже черезcurl_setoptс параметромCURLOPT_URL.
Функция возвращает ресурс типа cURL handle (в PHP 8 - объект CurlHandle) в случае успеха или false при неудаче.
Простые примеры использования curl_init
<?php
$ch = curl_init('https://api.example.com/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>{"status":"success","data":[...]}<?php
$ch = curl_init('https://api.example.com/post');
$postData = ['key' => 'value'];
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($postData)
]);
$result = curl_exec($ch);
curl_close($ch);Ответ от сервера принят.
<?php
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://api.example.com',
CURLOPT_HTTPHEADER => ['Authorization: Bearer token123', 'Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true
]);Альтернативы cURL в PHP
Используется для простых GET-запросов. Позволяет читать содержимое файла или URL как строку. Менее гибкая, но проще для базовых задач.
$context = stream_context_create(['http' => ['method' => 'GET']]);
$result = file_get_contents('https://example.com', false, $context);Предоставляет объектно-ориентированный интерфейс для HTTP-запросов. Удобно для сложных сценариев, но требует установки дополнительного расширения.
Современная PHP-библиотека для HTTP-запросов. Имеет асинхронные возможности, пулы соединений, middleware. Рекомендуется для сложных проектов.
Типичные ошибки при работе с curl_init
<?php
$ch = curl_init('invalid://url');
curl_exec($ch); // Молчаливая ошибка
?>Ничего не происходит, функция возвращает false.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Небезопасно!$ch = curl_init();
// Забыли вызвать curl_close()curl_setopt($ch, 'INCORRECT_OPTION', true); // Тихая ошибкаИзменения в curl init в новых версиях PHP
Функция теперь возвращает объект CurlHandle вместо ресурса. Это улучшает типобезопасность и согласуется с общей политикой отказа от ресурсов.
<?php
$ch = curl_init();
var_dump($ch);
?>object(CurlHandle)#1 (0) { }Удалены устаревшие константы, такие как CURLOPT_CLOSEPOLICY и связанные с ними.
Расширенные примеры работы с cURL
<?php
$urls = ['https://api1.example.com', 'https://api2.example.com'];
$mh = curl_multi_init();
$handles = [];
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch);
$handles[] = $ch;
}
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running);
foreach ($handles as $ch) {
echo curl_multi_getcontent($ch);
curl_multi_remove_handle($mh, $ch);
}
curl_multi_close($mh);
?>function progressCallback($resource, $downloadSize, $downloaded, $uploadSize, $uploaded) {
if ($downloadSize > 0) {
$percent = $downloaded / $downloadSize * 100;
echo "Загружено: $percent%\n";
}
}
$ch = curl_init('https://example.com/largefile.zip');
$fp = fopen('local.zip', 'w');
curl_setopt_array($ch, [
CURLOPT_FILE => $fp,
CURLOPT_NOPROGRESS => false,
CURLOPT_PROGRESSFUNCTION => 'progressCallback'
]);
curl_exec($ch);$ch = curl_init('https://example.com/login');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_COOKIEJAR => 'cookies.txt', // Сохранить куки после запроса
CURLOPT_COOKIEFILE => 'cookies.txt', // Отправить куки с запросом
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => 'user=admin&pass=123'
]);
curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, 'https://example.com/dashboard');
curl_setopt($ch, CURLOPT_POST, false);
$dashboard = curl_exec($ch); // Запрос с сохраненными куками$ch = curl_init('https://api.example.com/resource');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json-patch+json',
'X-Custom-Header: value'
],
CURLOPT_POSTFIELDS => '[{"op": "replace", "path": "/name", "value": "new"}]'
]);Аналоги curl_init в других языках
Более высокоуровневый и удобный интерфейс по сравнению с cURL.
import requests
response = requests.get('https://api.example.com/data')
print(response.json())Современный API для HTTP-запросов, основанный на промисах.
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data));Позволяет загружать данные из файла или URL в таблицу, но с ограниченной поддержкой протоколов.
LOAD DATA INFILE 'https://example.com/data.csv'
INTO TABLE my_table;