WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_remote_post() WP 2.7.0

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

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

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

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

Хуков нет.

Возвращает

Массив/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, то это позволит PHP продолжать работу, пока запрос обрабатывается. Полезно это, когда вам нужно просто отправить запрос и не важно был ли он обработан и что он вернул. (имейте ввиду, что не все серверы поддерживают эту функцию и даже установив этот параметр в false, блокировка все равно будет. Альтернатива: установить timeout в 1 секунду, но делать это не рекомендуется, т.к. запрос может быть не послан вообще).
    По умолчанию: true

  • compress — позволяет отправлять тело запроса (body) в сжатом виде.
    По умолчанию: true

  • decompress — по умолчанию true. Отвечает за параметр accept-encoding. Если установить в false, то в серверу в заголовках будет сказано, что принимаются сжатые данные и при получении сжатые данные тела (body) будут распакованы.
    По умолчанию: true

  • sslverify — логический. true - будет проверять SSL сертификат (подпись, актуальность к сайту) и прервет запрос, если проверка не будет пройдена. Если вы запрашиваете https и знаете что проверка может быть не пройдена, но сайту можно доверять, то уберите проверку сертификата - поставьте в этом параметре false.
    По умолчанию: true

По умолчанию: array() (предустановки)

Полный список параметров смотрите в описании функции wp_remote_request()

Примеры

#1 Отправит post данные на удаленный УРЛ

Допустим нам нужно отправить запрос на УРЛ http://site.ru/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 код страницы, полученной в результате запроса.

Код wp remote post: wp-includes/http.php WP 5.2.1

<?php
function wp_remote_post( $url, $args = array() ) {
	$http = _wp_http_get_object();
	return $http->post( $url, $args );
}

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

Из метки: HTTP API (curl remote)

3 коммента
  • unskill

    Спасибо, было полезно.

    Ответить1.3 года назад #
  • Velements

    здравствуйте! Даже не знал что такое есть в вордпрессе, спасибо! А как обстоят дела с мультикурлом, к примеру если надо получить данные с 500 000 страниц различных сайтов?

    Ответить10 мес назад #
Здравствуйте, !     Войти . Зарегистрироваться