Curl (Exception)

Исключение для транспорта cURL
Класс WordPress
WordPress Icon

Описание класса

Класс «Curl» в WordPress представляет собой обертку для работы с библиотекой cURL, которая предоставляет возможности для выполнения HTTP-запросов, обмена данными с удаленными серверами и получения ответов.

Этот класс используется в WordPress для отправки HTTP-запросов на удаленные серверы, получения ответов и обработки ошибок, возникающих при выполнении запросов.

Класс является частью системы транспорта WordPress, которая отвечает за обработку и отправку HTTP-запросов. Он предоставляет удобный интерфейс для работы с cURL и позволяет разработчикам легко взаимодействовать с удаленными серверами.

Методы

  • __construct — Создает новое исключение CURL Transport Exception.
  • getReason — Возвращает сообщение об ошибке.

Метод __construct используется для создания нового исключения CURL Transport Exception. Исключение может быть выброшено при возникновении ошибок при выполнении HTTP-запросов с использованием cURL.

Метод getReason используется для получения сообщения об ошибке, которое было установлено при выбрасывании исключения CURL Transport Exception. Этот метод позволяет разработчикам получить информацию о причине возникновения ошибки и выполнить соответствующие действия для ее обработки.

Методы

format_get()

Метод format_get() класса Curl используется для форматирования URL с использованием данных GET запроса. Он принимает URL и данные в виде массива или объекта и возвращает отформатированный URL с данными GET запроса.

Curl::format_get( string $url, array|object $data ): string

Метод format_get() принимает два параметра: $url (обязательный) — исходный URL, и $data (обязательный) — данные для построения запроса с использованием функции http_build_query().

$url string (обязательный) — Исходный URL.

$data array|object (обязательный) — Данные для построения запроса с использованием функции http_build_query().

Метод format_get() возвращает строку — URL с данными GET запроса.

<code>$url = 'https://example.com/api';
$data = array(
    'param1' => 'value1',
    'param2' => 'value2'
);
$formatted_url = Curl::format_get($url, $data);

В данном примере мы задаем исходный URL $url и данные для GET запроса $data. Затем мы вызываем метод format_get() класса Curl и передаем ему исходный URL и данные. Результатом будет отформатированный URL с данными GET запроса, который будет сохранен в переменной $formatted_url.

getReason()

Метод getReason() класса Curl используется для получения сообщения об ошибке CURL Transport Exception.

Curl::getReason(): string

Этот метод является публичным статическим методом класса Curl. Он не принимает аргументов и возвращает строку.

Метод используется для получения сообщения об ошибке, возникшей при выполнении запроса с использованием CURL.

Он возвращает строку, которая представляет собой сообщение об ошибке CURL Transport Exception.

get_expect_header()

Метод get_expect_header() класса Curl используется для получения правильного заголовка «Expect» для указанных данных запроса.

Curl::get_expect_header( string|array $data ): string

Метод get_expect_header() принимает один обязательный параметр $data, который представляет собой данные, отправляемые либо в теле POST-запроса, либо в параметрах URL для GET/HEAD-запроса.

$data (string|array) — Обязательный. Данные, отправляемые либо в теле POST-запроса, либо в параметрах URL для GET/HEAD-запроса.

Метод get_expect_header() возвращает строку с заголовком «Expect».

<code>$data = array(
    'param1' => 'value1',
    'param2' => 'value2'
);
$expect_header = Curl::get_expect_header($data);
// $expect_header содержит строку с заголовком "Expect"

get_subrequest_handle()

Метод get_subrequest_handle() возвращает cURL-обработчик для использования в множественном запросе. Он используется для создания отдельных подзапросов в рамках одного большого запроса.

Curl::get_subrequest_handle( string $url, array $headers, string|array $data, array $options ): resource|CurlHandle

Метод get_subrequest_handle() принимает следующие параметры:

$url (string, обязательный) — URL для запроса.

$headers (array, обязательный) — Ассоциативный массив заголовков запроса.

$data (string|array, обязательный) — Данные, которые будут отправлены либо в теле POST-запроса, либо в виде параметров в URL для GET/HEAD-запроса.

$options (array, обязательный) — Параметры запроса, см. документацию к методу WpOrgRequestsRequests::response() для получения подробной информации.

Метод get_subrequest_handle() принимает следующие параметры:

  • $url (string, обязательный) — URL для запроса.
  • $headers (array, обязательный) — Ассоциативный массив заголовков запроса.
  • $data (string|array, обязательный) — Данные, которые будут отправлены либо в теле POST-запроса, либо в виде параметров в URL для GET/HEAD-запроса.
  • $options (array, обязательный) — Параметры запроса, см. документацию к методу WpOrgRequestsRequests::response() для получения подробной информации.

Метод get_subrequest_handle() возвращает cURL-обработчик подзапроса.

<?php
/**
 * Пример использования метода get_subrequest_handle()
 */
// URL для запроса
$url = 'https://example.com/api';
// Заголовки запроса
$headers = array(
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer abcdef123456'
);
// Данные для отправки
$data = array(
    'param1' => 'value1',
    'param2' => 'value2'
);
// Параметры запроса
$options = array(
    'timeout' => 10,
    'sslverify' => false
);
// Получение cURL-обработчика подзапроса
$subrequest_handle = Curl::get_subrequest_handle($url, $headers, $data, $options);
// Дальнейшая обработка подзапроса
// ...
?>

process_response()

Метод process_response() используется для обработки ответа от сервера. Он принимает данные ответа и параметры запроса, и возвращает данные ответа вместе с заголовками.

Curl::process_response( string $response, array $options ): string|false

Метод process_response() принимает два обязательных параметра: $response — данные ответа от сервера, и $options — параметры запроса. Он возвращает данные ответа вместе с заголовками в виде строки или false в случае неблокирующего режима.

$response (string) — Обязательный. Данные ответа от сервера.

$options (array) — Обязательный. Параметры запроса.

Метод process_response() возвращает данные ответа от сервера вместе с заголовками в виде строки. В случае неблокирующего режима возвращает false.

<?php
// Пример использования метода process_response()
// Данные ответа от сервера
$response = 'HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 138
Date: Wed, 01 Dec 2021 12:00:00 GMT
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>';
// Параметры запроса
$options = array(
    'timeout' => 10,
    'headers' => array(
        'Authorization: Bearer token',
        'User-Agent: My-App'
    )
);
// Обработка ответа
$result = Curl::process_response($response, $options);
// Вывод данных ответа
echo $result;
?>

В данном примере мы имеем данные ответа от сервера в виде строки $response и параметры запроса $options. Метод process_response() обрабатывает эти данные и возвращает результат в переменную $result. Затем мы выводим данные ответа на экран.

request()

Метод request() выполняет HTTP-запрос с использованием библиотеки cURL. Он позволяет отправлять запросы на удаленные серверы и получать ответы. Метод используется для обмена данными между WordPress-сайтом и другими веб-серверами.

Curl::request( string|WpOrgRequestsTransportStringable $url, array $headers = array(), string|array $data = array(), array $options = array() ): string

Метод request() принимает следующие параметры:

  • $url (обязательный) — URL для выполнения запроса;
  • $headers (необязательный) — ассоциативный массив заголовков запроса (по умолчанию пустой массив);
  • $data (необязательный) — данные, которые нужно отправить в теле запроса (может быть строкой или массивом) (по умолчанию пустой массив);
  • $options (необязательный) — параметры запроса (см. документацию к методу response() класса WpOrgRequestsRequests) (по умолчанию пустой массив).

Метод request() возвращает строку с результатом HTTP-запроса.

<?php
// URL для выполнения запроса
$url = 'https://example.com/api';
// Заголовки запроса
$headers = array(
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer token'
);
// Данные для отправки
$data = array(
    'name' => 'John Doe',
    'email' => 'john@example.com'
);
// Параметры запроса
$options = array(
    'timeout' => 10,
    'sslverify' => true
);
// Выполнение запроса
$response = Curl::request($url, $headers, $data, $options);
// Вывод результата
echo $response;
?>

В данном примере мы выполняем POST-запрос на URL https://example.com/api с заголовками Content-Type: application/json и Authorization: Bearer token. В теле запроса отправляем данные в формате JSON, содержащие имя и электронную почту. Устанавливаем таймаут запроса в 10 секунд и включаем проверку SSL-сертификата. Результат запроса сохраняем в переменную $response и выводим его.

request_multiple()

Метод request_multiple() класса Curl позволяет отправлять несколько запросов одновременно. Он использует библиотеку cURL для выполнения запросов и возвращает массив объектов WpOrgRequestsResponse, которые содержат ответы на запросы.

Curl::request_multiple( array $requests, array $options ): array

Метод request_multiple() принимает два обязательных параметра:

  • $requests (array) — Массив данных запросов.
  • $options (array) — Глобальные опции.

$requests (array) — Обязательный. Массив данных запросов. Каждый элемент массива должен быть ассоциативным массивом, содержащим следующие ключи:

  • 'url' (string) — URL-адрес запроса.
  • 'method' (string) — Метод запроса (GET, POST, PUT и т.д.).
  • 'headers' (array) — Заголовки запроса.
  • 'body' (string|array) — Тело запроса.
  • 'cookies' (array) — Куки запроса.
  • 'auth' (array) — Аутентификация запроса.
  • 'timeout' (int) — Таймаут запроса в секундах.
  • 'sslverify' (bool) — Проверка SSL-сертификата.
  • 'proxy' (string) — Прокси-сервер.

$options (array) — Обязательный. Глобальные опции. Массив, содержащий следующие ключи:

  • 'timeout' (int) — Таймаут запроса в секундах.
  • 'sslverify' (bool) — Проверка SSL-сертификата.
  • 'proxy' (string) — Прокси-сервер.

Метод request_multiple() возвращает массив объектов WpOrgRequestsResponse, которые содержат ответы на запросы. Массив может также содержать объекты WpOrgRequestsException или строки с ответами.

<?php
/**
 * Пример использования метода request_multiple()
 */
// Массив данных запросов
$requests = array(
    array(
        'url'     => 'https://example.com/api/endpoint1',
        'method'  => 'GET',
        'headers' => array(
            'Content-Type' => 'application/json',
            'Authorization' => 'Bearer token1'
        ),
        'timeout' => 10,
        'sslverify' => true
    ),
    array(
        'url'     => 'https://example.com/api/endpoint2',
        'method'  => 'POST',
        'headers' => array(
            'Content-Type' => 'application/json',
            'Authorization' => 'Bearer token2'
        ),
        'body'    => json_encode( array( 'param1' => 'value1' ) ),
        'timeout' => 5,
        'sslverify' => true
    )
);
// Глобальные опции
$options = array(
    'timeout'   => 20,
    'sslverify' => true,
    'proxy'     => 'https://proxy.example.com:8080'
);
// Отправка запросов
$responses = Curl::request_multiple( $requests, $options );
// Обработка ответов
foreach ( $responses as $response ) {
    if ( $response instanceof WpOrgRequestsException ) {
        // Обработка исключения
        echo 'Error: ' . $response->getMessage();
    } elseif ( is_string( $response ) ) {
        // Обработка строки с ответом
        echo 'Response: ' . $response;
    } else {
        // Обработка объекта WpOrgRequestsResponse
        echo 'Status Code: ' . $response->status_code;
        echo 'Headers: ' . print_r( $response->headers, true );
        echo 'Body: ' . $response->body;
    }
}
?>

setup_handle()

Метод setup_handle() используется для настройки объекта cURL для передачи данных. Он позволяет установить URL, заголовки, данные и параметры запроса.

Curl::setup_handle( string $url, array $headers, string|array $data, array $options )

Метод setup_handle() принимает четыре обязательных параметра:

  • $url — строка, обязательный параметр, URL для запроса.
  • $headers — массив, обязательный параметр, ассоциативный массив заголовков запроса.
  • $data — строка или массив, обязательный параметр, данные, которые будут отправлены в теле POST-запроса или в параметрах URL для GET/HEAD-запроса.
  • $options — массив, обязательный параметр, параметры запроса, см. документацию к методу WpOrgRequestsRequests::response() для получения подробной информации.

/**
 * Пример использования метода setup_handle()
 */
// Устанавливаем URL
$url = 'https://example.com/api';
// Устанавливаем заголовки
$headers = array(
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer token'
);
// Устанавливаем данные
$data = array(
    'param1' => 'value1',
    'param2' => 'value2'
);
// Устанавливаем параметры запроса
$options = array(
    'timeout' => 30,
    'sslverify' => false
);
// Настройка объекта cURL
Curl::setup_handle($url, $headers, $data, $options);

В этом примере мы устанавливаем URL, заголовки, данные и параметры запроса с помощью метода setup_handle() класса Curl.

stream_body()

Метод stream_body() класса Curl используется для сбора данных по мере их получения.

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

Он работает путем вызова функции обратного вызова, которая обрабатывает данные по мере их поступления.

Curl::stream_body( resource|CurlHandle $handle, string $data ): integer

Метод stream_body() принимает два обязательных параметра: $handle и $data.

$handle — это ресурс или экземпляр класса CurlHandle, представляющий сеанс cURL.

$data — это строка, содержащая данные ответа на запрос.

Метод возвращает целое число, представляющее длину предоставленных данных.

$handle (resource|CurlHandle) — Обязательный параметр. Ресурс или экземпляр класса CurlHandle, представляющий сеанс cURL.

$data (string) — Обязательный параметр. Данные ответа на запрос.

Метод stream_body() возвращает целое число — длину предоставленных данных.

<?php
// Создание экземпляра класса Curl
$curl = new Curl();
// Установка URL-адреса для запроса
$curl->setUrl('https://example.com/api');
// Установка функции обратного вызова для обработки данных
$curl->setStreamCallback(function($data) {
    // Обработка данных по мере их получения
    echo $data;
});
// Выполнение запроса с использованием метода stream_body()
$curl->stream_body();
// Завершение сеанса cURL
$curl->close();
?>

В приведенном выше примере мы создаем экземпляр класса Curl и устанавливаем URL-адрес для запроса.

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

После этого вызываем метод stream_body(), который начинает сбор данных по мере их получения и передает их в функцию обратного вызова.

Наконец, мы закрываем сеанс cURL с помощью метода close().

stream_headers()

Метод stream_headers() класса Curl используется для сбора заголовков, как только они получены в процессе выполнения запроса с использованием cURL.

Curl::stream_headers( resource|CurlHandle $handle, string $headers ): integer

Метод stream_headers() принимает два параметра: $handle и $headers. Первый параметр $handle является обязательным и представляет собой дескриптор cURL или объект CurlHandle. Второй параметр $headers также является обязательным и представляет собой строку с заголовками.

$handle (resource|CurlHandle) — Обязательный. Дескриптор cURL или объект CurlHandle.

$headers (string) — Обязательный. Строка с заголовками.

Метод stream_headers() возвращает целое число — длину предоставленного заголовка.

<code>$handle = curl_init();
$headers = "Content-Type: application/jsonrn";
$headers .= "Authorization: Bearer token123rn";
$result = Curl::stream_headers($handle, $headers);

В данном примере мы создаем новый дескриптор cURL с помощью функции curl_init(). Затем мы формируем строку с заголовками, добавляя в нее тип контента и авторизационный токен. Далее мы вызываем метод stream_headers() класса Curl и передаем в него дескриптор cURL и строку с заголовками. Результатом выполнения метода будет длина предоставленного заголовка, которая будет сохранена в переменной $result.

test()

Метод test() класса Curl используется для самопроверки возможности использования транспорта CURL. Он выполняет проверку наличия и корректности установки CURL на сервере.

Curl::test( $capabilities = array() ): bool

Метод test() не принимает никаких обязательных параметров. Он принимает необязательный ассоциативный массив $capabilities, который содержит возможности для проверки. По умолчанию, массив пустой.

bool $capabilities (необязательно): Ассоциативный массив возможностей для проверки. Например, [ 'ssl' => true ]. По умолчанию, пустой массив.

Метод test() возвращает булево значение true, если транспорт CURL может быть использован, и false в противном случае.

<?php
/**
 * Проверка возможности использования транспорта CURL.
 *
 * @param array $capabilities Ассоциативный массив возможностей для проверки.
 *                            Например, [ 'ssl' => true ].
 * @return bool Возвращает true, если транспорт CURL может быть использован, и false в противном случае.
 */
function check_curl_transport( $capabilities = array() ) {
    // Проверяем возможность использования транспорта CURL.
    $can_use_curl = Curl::test( $capabilities );
    if ( $can_use_curl ) {
        echo 'Транспорт CURL может быть использован.';
    } else {
        echo 'Транспорт CURL не может быть использован.';
    }
}
?>

__construct()

Метод __construct() является конструктором класса Curl и используется для создания нового исключения типа «CURL Transport Exception». Он создает новый экземпляр исключения с заданными параметрами.

Curl::__construct( string $message, string $type, mixed $data = null, int $code )

Конструктор __construct() принимает следующие параметры:

  • $message (строка, обязательный) — сообщение об исключении.
  • $type (строка, обязательный) — тип исключения.
  • $data (любой тип, необязательный) — связанные данные, если применимо. По умолчанию: null.
  • $code (целое число, обязательный) — числовой код исключения, если применимо.

/**
 * Создает новое исключение типа "CURL Transport Exception".
 *
 * @param string $message Сообщение об исключении.
 * @param string $type Тип исключения.
 * @param mixed $data Связанные данные, если применимо. По умолчанию: null.
 * @param int $code Числовой код исключения, если применимо.
 */
public function __construct( string $message, string $type, mixed $data = null, int $code ) {
    // Создание нового экземпляра исключения
}

В приведенном выше примере кода показано, как использовать метод __construct() для создания нового исключения типа «CURL Transport Exception». Метод принимает необходимые параметры: $message (сообщение об исключении), $type (тип исключения) и $code (числовой код исключения). Опционально, вы можете указать связанные данные с помощью параметра $data. Внутри метода осуществляется создание нового экземпляра исключения.

__destruct()

Метод __destruct() является деструктором класса Curl и вызывается автоматически при уничтожении объекта этого класса. Деструкторы в PHP используются для освобождения ресурсов, которые были выделены объекту во время его жизни.

В случае класса Curl, метод __destruct() выполняет очистку и закрытие соединения с сервером, которое было установлено при использовании класса для выполнения HTTP-запросов. Это позволяет освободить ресурсы и избежать утечек памяти.

Curl::__destruct();

Данный код не требует явного вызова, так как метод __destruct() будет автоматически вызван при уничтожении объекта класса Curl.

Важно убедиться, что все необходимые действия для закрытия соединения и освобождения ресурсов были выполнены внутри метода __destruct(). В противном случае, возможны утечки памяти и другие проблемы.

Примеры использования

Создание экземпляра класса Curl


// Создание экземпляра класса Curl
$curl = new Curl();

Для создания экземпляра класса Curl используется конструктор «__construct». Он не принимает никаких аргументов и создает новый объект Curl.

Получение сообщения об ошибке


// Получение сообщения об ошибке
try {
    // Выполнение операции, которая может вызвать исключение Curl Transport Exception
} catch (Curl_Transport_Exception $e) {
    $error_message = $e->getReason();
    echo "Ошибка Curl: " . $error_message;
}

Для получения сообщения об ошибке при использовании класса Curl, необходимо использовать метод «getReason». Он возвращает текстовое описание ошибки, которая произошла при выполнении операции.

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


// Отправка GET-запроса
$response = $curl->get('https://example.com/api/data');
echo "Ответ сервера: " . $response;

Для отправки GET-запроса используется метод «get» класса Curl. В качестве аргумента передается URL, на который будет отправлен запрос. Метод возвращает ответ сервера, который можно сохранить в переменную и использовать дальше.

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


// Отправка POST-запроса
$data = array(
    'name' => 'John Doe',
    'email' => 'john@example.com'
);
$response = $curl->post('https://example.com/api/submit', $data);
echo "Ответ сервера: " . $response;

Для отправки POST-запроса используется метод «post» класса Curl. В качестве первого аргумента передается URL, на который будет отправлен запрос. Второй аргумент — массив данных, которые будут отправлены на сервер. Метод возвращает ответ сервера, который можно сохранить в переменную и использовать дальше.

Установка пользовательских заголовков


// Установка пользовательских заголовков
$headers = array(
    'Authorization: Bearer token',
    'Content-Type: application/json'
);
$curl->setHeaders($headers);

Для установки пользовательских заголовков в запросе используется метод «setHeaders» класса Curl. В качестве аргумента передается массив строк, каждая из которых представляет собой заголовок в формате «Имя: Значение».

Вопросы и ответы

Как обработать ошибку CURL Transport Exception?

Для обработки ошибки CURL Transport Exception в WordPress можно использовать метод getReason() класса Curl. Этот метод возвращает сообщение об ошибке.


try {
    // Код, вызывающий ошибку CURL Transport Exception
} catch (Curl $e) {
    $error_message = $e->getReason();
    // Обработка ошибки
}

Как получить сообщение об ошибке CURL Transport Exception?

Для получения сообщения об ошибке CURL Transport Exception в WordPress используйте метод getReason() класса Curl. Этот метод возвращает текст ошибки.


try {
    // Код, вызывающий ошибку CURL Transport Exception
} catch (Curl $e) {
    $error_message = $e->getReason();
    // Обработка ошибки
}

Как создать новое исключение CURL Transport Exception?

Для создания нового исключения CURL Transport Exception в WordPress используйте конструктор класса Curl. Этот конструктор принимает сообщение об ошибке в качестве аргумента.


try {
    throw new Curl('Ошибка CURL Transport Exception');
} catch (Curl $e) {
    $error_message = $e->getReason();
    // Обработка ошибки
}

Как использовать класс Curl для выполнения HTTP-запросов?

Класс Curl предоставляет возможность выполнения HTTP-запросов с использованием библиотеки cURL. Для создания экземпляра класса Curl используйте метод «__construct()».


$curl = new Curl();

После создания экземпляра класса Curl, вы можете использовать его методы для выполнения HTTP-запросов.

Например, чтобы выполнить GET-запрос, используйте метод «get()»:


$response = $curl->get('https://example.com/api');

А чтобы выполнить POST-запрос, используйте метод «post()»:


$data = array('name' => 'John', 'age' => 30);
$response = $curl->post('https://example.com/api', $data);

Как обрабатывать исключения CURL при работе с API?

При работе с API возможны ситуации, когда происходят ошибки при выполнении HTTP-запросов. Класс Curl предоставляет метод «getReason()», который позволяет получить сообщение об ошибке.


try {
    $response = $curl->get('https://example.com/api');
} catch (CurlTransportException $e) {
    $errorMessage = $e->getReason();
    // Обработка ошибки
}

Как установить таймаут для CURL-запросов?

Чтобы установить таймаут для CURL-запросов, используйте метод «setTimeout()».


$curl->setTimeout(10); // Установка таймаута в 10 секунд

Теперь CURL-запросы будут автоматически прерываться, если ответ не будет получен в течение указанного времени.

Как обрабатывать ошибки SSL при использовании CURL?

При использовании CURL могут возникать ошибки SSL, связанные с сертификатами. Для обработки таких ошибок, класс Curl предоставляет метод «setOpt()».


$curl->setOpt(CURLOPT_SSL_VERIFYPEER, false); // Отключение проверки сертификата

Теперь CURL-запросы не будут проверять сертификаты SSL и ошибки связанные с SSL не будут вызывать исключения.

Класс Curl в WordPress предоставляет удобные методы для выполнения HTTP-запросов с использованием библиотеки cURL. Вы можете использовать его для отправки GET и POST запросов, установки таймаута и обработки ошибок SSL. Благодаря классу Curl, вы можете легко взаимодействовать с API и обрабатывать возможные ошибки при работе с HTTP-запросами.

Обсуждение