wp_remote_request()

Выполняет HTTP-запрос к серверу и возвращает ответ от сервера.

Функция является частью WordPress HTTP API, про него у меня есть отдельный урок.

В WordPress существуют и другие функции для отправки HTTP-запросов, предназначенные для определённых HTTP-методов, хотя в самих функциях отличий никаких нет.

wp_remote_request( $url, $args = array() )

Параметры

$url
(строка) URL, к которому осуществляется запрос.
$args
(массив) Дополнительные параметры запроса.
method
(строка) Метод запроса. Принимает значения GET, POST, HEAD, PUT, DELETE, TRACE, OPTIONS или PATCH.
 
По умолчанию – GET.
timeout
(целое число) Лимит времени в секундах, в течение которого данные должны быть получены. Если сторонний сервер отвечает слишком долго, то лучше установить значение побольше, иначе запрос будет прерываться. Например я сталкивался с такой ситуацией, и установка параметра в значение 45 спасило ситуацию.
 
По умолчанию – 5.
redirection
(целое число) Лимит по редиректам. В некоторых ситуациях при обращении по определённому урл, сервер может произвести редирект на другой урл. Этим параметром мы можем задать максимальное количество таких редиректов, при превышении которого запрос будет прерываться.
 
По умолчанию – 5.
httpversion
(строка) Версия используемого протокола. Поддерживаемые значения 1.0 (по умолчанию) и 1.1
user-agent
(строка) По умолчанию: WordPress/' . get_bloginfo( 'version' ) . '; ' . get_bloginfo( 'url' )
reject_unsafe_urls
(логическое) Нужно ли осуществлять проверку безопасности URL функцией wp_http_validate_url(). По умолчанию принимает значение false, то есть проверка не осуществляется.
blocking
(логическое) Это будет блокирующий (true – по умолчанию) или неблокирующий (false) запрос? Неблокирующие запросы полезны, когда вам нужно отправить какой-то запрос на сторонний сервер и сразу же продолжить выполнение PHP-кода, не дожидаясь ответа. Обратите внимание, что неблокирующие запросы могут не поддерживаться на некоторых хостингах.
headers
(строка|массив) Заголовки запроса. С их помощью мы можем например выполнить базовую авторизацию.
cookies
(массив) Куки, посылаемые в запросе.
body
(строка|массив) Тело запроса. Например может использоваться при осуществлении запроса платежа платёжным шлюзом и содержать список товаров в заказе и адрес доставки клиента.
 
По умолчанию – null.
compress
(логическое) Нужно ли сжимать тело запроса (body) при отправке.
 
По умолчанию – false (не нужно).
decompress
(логическое) Нужно ли попытаться распаковать полученные данные?
 
По умолчанию true – да.
sslverify
(логическое) Нужно ли проверять корректность SSL для запроса.
 
По умолчанию true – да.
sslcertificates
(строка) Абсолютный путь к файлу SSL-сертификата .crt.
 
По умолчанию: ABSPATH . WPINC . '/certificates/ca-bundle.crt'.
stream
(логическое) Нужно ли записать полученный ответ в файл.
 
По умолчанию: false.
filename
(строка) Файл, в который нужно записать ответ, если параметр stream указан в значение true.
limit_response_size
(целое число) Количество байтов, которыми нужно ограничить размер ответа.
 
По умолчанию – null.

Что возвращает

Если вдруг запрос к серверу не удалось выполнить, функция возвращает объект ошибки WP_Error.

Если всё ок, то массив со следующей структурой:

$response = array(
	'headers'  => массив, // заголовки ответа
	'response' => array(
		'code'    => целое, // код ответа
		'message' => строка // сообщение, сформированное на основе кода
	),
	'body'     => строка, // тело ответа
	'cookies'  => массив,
	'filename' => строка
);

Примеры

1. Парсим сайт

Давайте попробуем запарсить главную страницу моего сайта:

$request = wp_remote_request( 'https://misha.agency' );
print_r( $request );
 
/* 
Array
(
    [headers] => Requests_Utility_CaseInsensitiveDictionary Object
        (
            [data:protected] => Array
                (
                    [server] => nginx-reuseport/1.21.1
                    [date] => Sat, 12 Feb 2022 05:28:14 GMT
                    [content-type] => text/html; charset=UTF-8
                    [content-length] => 6407
                    [x-powered-by] => PHP/7.3.31
                    [vary] => Accept-Encoding,Cookie
                    [cache-control] => max-age=3, must-revalidate
                    [content-encoding] => gzip
                    [last-modified] => Sat, 12 Feb 2022 05:13:57 GMT
                )
 
        )
 
    [body] => <!DOCTYPE html><html ....тут весь HTML страницы сайта... </html>
    [response] => Array
        (
            [code] => 200
            [message] => OK
        )
 
    [cookies] => Array
        (
        )
 
    [filename] => 
)

2. Использование других HTTP-методов, например DELETE

Если вы почитали описания других функций по работе с HTTP-запросами или даже посмотрели мой видеоурок по ним, то вы наверное уже мастерски владеете GET и POST-запросами. Но где и когда используются другие методы запроса, например PATCH или DELETE?

В качестве примера рассмотрим MailChimp API.

$api_key = 'Тут ключ доступа к API MailChimp';
$list_id = 'ID листа, откуда отписать пользователя';
$email = 'Email пользователя';
 
$url = 'https://' . substr( $api_key, strpos( $api_key, '-' ) +1 ) . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/' . md5( strtolower( $email ) );
// https://us10.api.mailchimp.com/3.0/lists/{list_id}/members/{subscriber_hash}
 
wp_remote_request( 
	$url,
	array(
		'method' => 'DELETE',
	 	'headers' => array(
			'Authorization' => 'Basic ' . base64_encode( 'user:'. $api_key ) // базовая авторизация
		)
	) 
);

Источник: Блог Миши Рудрастых

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: