Функция WP_REMOTE_REQUEST() в WordPress 2.7.0: использование и примеры

# Функция WP_REMOTE_REQUEST() │ WP 2.7.0

Функция WP_REMOTE_REQUEST() позволяет отправлять HTTP-запросы и получать ответ в виде массива. Это полезно, когда ваше приложение необходимо взаимодействовать с другими веб-сервисами.

## Обертки для этой функции

Существуют специальные функции, которые могут упростить работу с HTTP-запросами:

- **GET**: wp_remote_get()
- **POST**: wp_remote_post()
- **HEAD**: wp_remote_head()

Если вы отправляете запрос на динамический URL-адрес, который может возвращать любые данные, рекомендуется использовать безопасную функцию: wp_safe_remote_request().

### Использование

Функция использует методы:

- _wp_http_get_object()
- WP_Http::request()

### Возвращаемое значение

Функция возвращает массив или ошибку WP_Error в случае неудачи. Структура возвращаемого массива:

```php
$res = array(
    'headers'  => array(),
    'response' => array(
        'code'    => int,
        'message' => string
    ),
    'body'     => string,
    'cookies'  => array(),
    'filename' => string
);
  • Индекс headers содержит заголовки ответа.
  • Индекс body содержит содержимое ответа.

Для получения информации из заголовков, например, User-Agent, можно использовать:

$user_agent = $res['headers']['user-agent'];

Применение функции

wp_remote_request( $url, $args );

Параметры

  • $url (string, обязательный): URL сайта, к которому отправляется запрос.
  • $args (array): аргументы запроса, в том числе:

    • body: массив параметров запроса, где ключ - это имя параметра, а значение - это его значение.

      array( 'foo' => 'val', 'bar' => 'val' )

      Примечание: используется только для методов PUT и POST. По умолчанию: null

    • method: HTTP метод запроса. Возможные значения: POST, GET, HEAD, PUT, DELETE. По умолчанию: 'GET'.

    • headers: заголовки для отправки с запросом (могут быть строкой или массивом). По умолчанию: пустой массив.

    • cookies: массив куки для запроса. Подробнее: WP_Http::normalize_cookies() и WP_Http::buildCookieHeader(). По умолчанию: пустой массив.

    • timeout: время в секундах, через которое подключение прерывается, если не удается выполнить запрос. По умолчанию: 5.

    • redirection: количество перенаправлений, которое нужно выполнить перед тем, как остановиться. По умолчанию: 5.

    • user-agent: позволяет установить пользовательский агент (user-agent), который будет отправляться с запросом. По умолчанию: 'WordPress/' . $wp_version . '; ' . get_bloginfo('url').

    • blocking: определяет, будет ли запрос блокирующим. По умолчанию: true. Установка false позволяет PHP продолжать выполнение скрипта, пока идет выполнение запроса. Это полезно, когда вы не заботитесь о результате запроса.

    • compress: разрешает сжатие тела запроса. По умолчанию: true.

    • sslverify: true - проверяет действительность SSL сертификата. Если вы уверены, что сайт надежен, можно установить false. По умолчанию: true.

    • stream: позволяет записывать данные в файл. Если true и параметр filename не указан, данные будут записаны в файл с именем basename(URL) во временной директории WordPress. По умолчанию: false.

    • limit_response_size: максимальный размер ответа в байтах. По умолчанию: null.

    • reject_unsafe_urls: если true, проверяет переданный URL на безопасность с помощью функции wp_http_validate_url(). По умолчанию: false.

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

Пример 1: Получение данных пользователя GitHub

GitHub предоставляет API. Давайте используем его для получения данных пользователя с именем erusev.

$response = wp_remote_request( 'https://api.github.com/users/erusev' );
print_r( $response );

Этот код выведет массив, содержащий заголовки и тело ответа, например:

Array
(
    [headers] => Array
    (
        [server] => GitHub.com
        ...
    )

    [body] => {"login": "erusev", "id":184170, ...}
    [response] => Array
    (
         => 200
        [message] => OK
    )

    ...
)

Пример 2: Установка куки для запроса

Вот пример, как задать куки вместе с запросом в WordPress:

$request_args = [
    'method' => 'POST',
    'headers' => [
        'Authorization' => 'Basic ' . base64_encode( 'log:pass' ),
    ],
    'cookies' => [
        'my_cook' => 'my_cook value',
    ],
];

$resp = wp_remote_request( $request_args );

Также можно использовать объект для задания дополнительных параметров куки:

$request_args = [
    'method' => 'POST',
    'headers' => [
        'Authorization' => 'Basic ' . base64_encode( 'log:pass' ),
    ],
    'cookies' => [
        new WP_Http_Cookie( [
            'name'    => 'my_cook',
            'value'   => 'my_cook value',
            'expires' => time() + ( DAY_IN_SECONDS * 7 ),
            'path'    => '/',
        ] ),
    ],
];

$resp = wp_remote_request( $request_args );

Примечания

  • Подробности по умолчанию: смотрите WP_Http::request() для получения информации по умолчанию аргументов.

Изменения

  • С 2.7.0 года: функция была добавлена в WordPress.

Связанные функции

  • wp_get_http_headers()
  • wp_http_validate_url()
  • wp_remote_get()
  • wp_remote_post()
  • wp_remote_retrieve_body()
  • wp_remote_retrieve_header()
  • wp_safe_remote_request()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *