wp_remote_post()
Отправляет HTTP запрос методом POST. Результат содержит HTTP заголовки, данные самой станицы и возвращается в виде массива. Обертка для использования curl.
В запрос можно передать данные cookies: передаются они как массив объектов WP_Http_Cookie.
Для HTTP GET метода используйте wp_remote_get().
Для других методов запроса используйте wp_remote_request().
Хуков нет.
Возвращает
Массив|WP_Error
.
- Данные ответа в виде массива.
- WP_Error возвращается в случае неудачного запроса. Важно! Если сервер вернул нестандартную ошибку: 500, 404 и т.д., то вы получите данные ответа, а не WP_Error.
Array ( [headers] => Array ( [date] => Thu, 30 Sep 2010 15:16:36 GMT [server] => Apache [x-powered-by] => PHP/5.3.3 [x-server] => 10.90.6.243 [expires] => Thu, 30 Sep 2010 03:16:36 GMT [cache-control] => Array ( [0] => no-store, no-cache, must-revalidate [1] => post-check=0, pre-check=0 ) [vary] => Accept-Encoding [content-length] => 1641 [connection] => close [content-type] => application/php ) [body] => <html>Это HTML код страницы сайта!</html> [response] => Array ( [code] => 200 [message] => OK ) [cookies] => Array ( ) )
Шаблон использования
wp_remote_post( $url, array( 'timeout' => 5, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'headers' => array(), 'body' => null, // параметры запроса в массиве 'cookies' => array() ) );
Использование
wp_remote_post( $url, $args );
- $url(строка) (обязательный)
- URL запроса.
- $args(массив)
Аргументы запроса, в виде массива. Могут быть:
-
body — массив параметров запроса, где ключ это название параметра и значение это значение параметра:
array('foo'=>'val', 'bar'=>'val')
-
timeout — время в секундах на получение данных. Время можно изменить в плагине через фильтр "http_request_timeout".
По умолчанию: 5 -
redirection — число, сколько раз переходить по редиректам, если они есть.
Значение можно изменить в плагине через фильтр "http_request_redirection_count".
По умолчанию: 5 -
user-agent — позволяет установить user-agent. По умолчанию
WordPress/4.0; http://www.example.com
, где 4.0 - текущая версия WP, а http://www.example.com - адрес сайта. Значение можно изменить через фильтр http_headers_useragent.
По умолчанию: 'WordPress/' . $wp_version . '; ' . get_bloginfo('url') -
blocking — Требуется ли вызывающему коду результат запроса. Позволяет выполнять не блокирующие запросы. По умолчанию true. Если установлено значение false, запрос будет отправлен на удаленный сервер, и результат вернется в вызывающий код немедленно, код при этом будет знать, был ли запрос успешным или неудачным, но не получит никакого ответа от удаленного сервера.
Полезно это, когда вам нужно просто отправить запрос и не важно что он вернул. (не все серверы поддерживают эту функцию и даже установив этот параметр в false, блокировка все равно может быть будет. Альтернатива: установить timeout в 0.01 секунду).
По умолчанию: true
-
compress — позволяет отправлять тело запроса (body) в сжатом виде.
По умолчанию: true -
decompress — по умолчанию true. Отвечает за параметр accept-encoding. Если установить в false, то в серверу в заголовках будет сказано, что принимаются сжатые данные и при получении сжатые данные тела (body) будут распакованы.
По умолчанию: true - sslverify — логический. true - будет проверять SSL сертификат (подпись, актуальность к сайту) и прервет запрос, если проверка не будет пройдена. Если вы запрашиваете https и знаете что проверка может быть не пройдена, но сайту можно доверять, то уберите проверку сертификата - поставьте в этом параметре false.
По умолчанию: true
По умолчанию: array() (предустановки)
Полный список параметров смотрите в описании функции wp_remote_request()
-
Примеры
#1 Отправит post данные на удаленный УРЛ
Допустим нам нужно отправить запрос на УРЛ http://example.com/profile. POST данные нужно отправлять в параметре body:
$url = 'http://example.com/profile'; $args = array( 'timeout' => 45, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'headers' => array(), 'body' => array( 'username' => 'bob', 'password' => '1234xyz' ), 'cookies' => array() ); $response = wp_remote_post( $url, $args ); // проверка ошибки if ( is_wp_error( $response ) ) { $error_message = $response->get_error_message(); echo "Что-то пошло не так: $error_message"; } else { echo 'Ответ: <pre>'; print_r( $response ); echo '</pre>'; }
В этом примере $response['body'] будет содержать html код страницы, полученной в результате запроса.
#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_Cookie::__construct().
Заметки
- Смотрите: wp_remote_request() For more information on the response array format.
- Смотрите: WP_Http::request() For default arguments information.
Список изменений
С версии 2.7.0 | Введена. |
Код wp_remote_post() wp remote post WP 6.7.1
function wp_remote_post( $url, $args = array() ) { $http = _wp_http_get_object(); return $http->post( $url, $args ); }