WordPress как на ладони
rgbcode is looking for WordPress developers.

wp_remote_post()WP 2.7.0

Отправляет HTTP запрос методом POST. Результат содержит HTTP заголовки, данные самой станицы и возвращается в виде массива. Обертка для использования curl.

В запрос можно передать данные cookies: передаются они как массив объектов WP_Http_Cookie.

Для HTTP GET метода используйте wp_remote_get().
Для других методов запроса используйте wp_remote_request().

Работает на основе: _wp_http_get_object(), WP_Http::post(), WP_Http::request()
Основа для: wp_check_browser_version()

Хуков нет.

Возвращает

Массив|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()

Примеры

0

#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 код страницы, полученной в результате запроса.

0

#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().

Заметки

Список изменений

С версии 2.7.0 Введена.

Код wp_remote_post() WP 6.4.3

function wp_remote_post( $url, $args = array() ) {
	$http = _wp_http_get_object();
	return $http->post( $url, $args );
}
2 комментария
    Войти