cURL

11 Ноября 2019 17:24 (Редактировано: 01 Сентября 2020 00:13)

cURL -  это модуль для PHP, позволяющий отправлять/получать запросы по http.

Принцип работы cURL

При использовании cURL-запросов существует 4 основных шага, которые должны быть в скрипте, это:

  • Инициализация
  • Назначение параметров
  • Выполнение и выборка результата
  • Освобождение памяти

Пример отправки запроса через cURL

// 1. инициализация
$ch = curl_init();

// 2. указываем параметры, включая url
curl_setopt($ch, CURLOPT_URL, "http://intop24.ru");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 3. получаем HTML в качестве результата
$output = curl_exec($ch);

// 4. закрываем соединение
curl_close($ch);

Проверка работы

Чтобы не нагружать сервер вычислениями, нужно всегда проверять результат функции curl_exec()

$output = curl_exec($ch);
// А вдруг ошибочка?
if ($output === FALSE) {
    //Тут-то мы о ней и скажем
    echo "cURL Error: " . curl_error($ch);
    return;
}

 Результат

//Выполняем запрос
curl_exec($ch);
//Получаем информацию о запросе
$info = curl_getinfo($ch);
//Выводим какую-то информацию
echo 'Запрос выполнился за  ' . $info['total_time'] . ' сек. к URL: ' . $info['url'];

Весь список параметров, которые можно получить в результате cURL-запроса:

Индекс массива Значение Индекс массива Значение
url string(17) "http://intop24.ru" content_type string(24) "text/html; charset=utf-8"
http_code int(200) header_size int(218)
request_size int(49) filetime int(-1)
ssl_verify_result int(0) redirect_count int(0)
total_time float(0.009419) namelookup_time float(1.3E-5)
connect_time float(1.3E-5) pretransfer_time float(1.4E-5)
size_upload float(0) size_download float(46523)
speed_download float(4939271) speed_upload float(0)
download_content_length float(-1) upload_content_length float(0)
starttransfer_time float(0.009374) redirect_time float(0)
certinfo array(0) { } redirect_url string(0) ""

Отправка POST-запроса

$url = "http://unreal-stuff.ru/post.php";

$post_data = array (
    "foo" => "bar",
    "query" => "Nettuts",
    "action" => "Submit"
);

$ch = curl_init();

curl_setopt_array($ch, 
    array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query($post_data)
    )
);

$output = curl_exec($ch);

curl_close($ch);

echo $output;

http_build_query используется для формирования  строки параметров из массива. Без него, запрос криво выполнится

Отправка заголовков

curl_setopt($ch, CURLOPT_HEADER, 1); //выставляем отправку заголовков
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: AccessToken 324jg54jg4058yhj',
    'X-User-Authorization: Basic password',
    'Content-Type: application/json;charset=UTF-8',
    'Accept: application/json;charset=UTF-8'
));

Указание метода

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');