Выполняет HTTP-запрос к серверу (методом POST) и возвращает полученный ответ.
Функция является частью WordPress HTTP API, про него у меня есть отдельный урок.
wp_remote_post( $url, $args = array() )
Параметры
- $url
- (строка) URL, к которому осуществляется запрос.
- $args
- (массив) Дополнительные параметры запроса.
- method
- (строка) Метод запроса. Принимает значения
GET
,POST
,HEAD
,PUT
,DELETE
,TRACE
,OPTIONS
илиPATCH
.
По умолчанию –POST
. - 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
.
Примеры
1. Передача параметров запроса
$response = wp_remote_post( $url, array( 'method' => 'POST', 'timeout' => 45, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'headers' => array(), 'body' => '', 'cookies' => array() ) ); if ( is_wp_error( $response ) ) { echo 'Ошибка:' . $response->get_error_message(); } else { print_r( $response ); }
2. Пример базовой авторизации
$username = ''; $password = ''; $response = wp_remote_post( $url, array( 'body' => $data, // какие-то передаваемые данные 'headers' => array( 'Authorization' => 'Basic ' . base64_encode( $username . ':' . $password ), ), ) );
3. Передача параметров в теле запроса
$endpoint = 'api.example.com'; // тело запроса // тут можно передать какие-то параметры в запрос, например информацию о товарах в заказе $body = array( 'billing_name' => 'Миша', 'product_name' => 'Air Jordan 1', ); // тело при передаче в запрос мы преобразуем в JSON $body = json_encode( $body ); $options = array( 'body' => $body, 'headers' => array( 'Content-Type' => 'application/json', ), 'timeout' => 60, 'redirection' => 5, 'blocking' => true, 'httpversion' => '1.0', 'sslverify' => false, 'data_format' => 'body', ); wp_remote_post( $endpoint, $options );
Источник: Блог Миши Рудрастых