wp_remote_request()WP 2.7.0

Создает любой тип HTTP запроса и возвращает ответ запроса в виде массива.

Для этой функции есть функции-обертки, для разных типов запросов:

Если вы отправляете запрос с динамически собранной ссылкой, в которую могут попасть данные от вас не зависящие, то такой запрос лучше делать с помощью безопасной функции: wp_safe_remote_request()

Работает на основе: _wp_http_get_object(), WP_Http::request()

Хуков нет.

Возвращает

Массив|WP_Error. Ответ запроса в виде массива или объект WP_Error в случае неудачного запроса.

  • Response считается удачным - если сервер ответил любым кодом (200, 401, 404, 500).
  • Вернется WP_Error - если указан неверный домен, либо внутри функции выкидывается WpOrg\Requests\Exception или имется другая ошибка в параметрах запроса.

Структура массива с данными ответа:

$res = [
	'headers'  => [],
	'response' => [
		'code'    => int,
		'message' => string
	],
	'body'     => string,
	'cookies'  => array,
	'filename' => string
];

Заголовки ответа находятся в индексе ответа headers, который содержит массив заголовка ответа. Например получить код ответа можно так: $res['headers']['status'], но лучше использовать специальную функцию wp_remote_retrieve_response_code().

Тело (контент) ответа находится в индексе body. Для получения используйте wp_remote_retrieve_body().

Использование

wp_remote_request( $url, $args );
$url(строка) (обязательный)
УРЛ куда нужно отправить запрос и получить ответ.
$args(массив)

Параметры запроса. Полный список параметров смотрите в коде класса WP_Http.

По умолчанию: array()

Часто используемые параметры:

  • body(строка/массив)
    Тело запроса, которое нужно отправить с запросом.
    Обычно тут указывается массив параметров запроса, где ключ это название параметра, а значение - это значение параметра, пр: array('foo'=>'val', 'bar'=>'val')

    Заметка: Используется только при методах запроса PUT, POST.

    По умолчанию: null

  • method(строка)
    HTTP метод запроса. Может быть: POST, GET, HEAD, PUT, DELETE.
    По умолчанию: 'GET'

  • 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(логический)
    Нужно ли ожидать ответа на запрос? Если установить в false, то запрос будет отправлен и php код немедленно продолжит работу, не дожидаясь ответа. Однако по ответу функции можно будет узнать удалось отправить запрос или нет, но невозможно будет узнать что ответил сервер, куда этот запрос был отправлен.

    Имейте ввиду, что не все серверы поддерживают эту функцию и при blocking=false может быть что блокировка все равно будет работать.
    По умолчанию: true

  • headers(строка/массив)
    Заголовки, которые нужно отправить с запросом.
    По умолчанию: array()

  • cookies(массив)
    Куки, которые нужно отправить с запросом. См.: WP_Http::normalize_cookies(), WP_Http::buildCookieHeader().
    По умолчанию: array()

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

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

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

  • sslcertificates(строка)
    Абсолютный путь до файла SSL сертификата ".crt".
    По умолчанию: ABSPATH . WPINC .'/certificates/ca-bundle.crt'

  • stream(логический)
    Нужно ли записывать данные в файл. Если установлено true и параметр filename не указан, то данные будут записываться в файл с названием basename(URL) во временную директорию WP.
    По умолчанию: false

  • filename(строка)
    Название файла (путь), куда нужно записывать поток, когда параметр stream выставлен в true.
    По умолчанию: null

  • limit_response_size(число)
    Размер в байтах, котором нужно ограничить ответ.
    По умолчанию: null

  • reject_unsafe_urls(логический)
    Очищать ли передаваемый URL через функцию wp_http_validate_url()
    По умолчанию: false

Примеры

0

#1 Получим данные пользователя GitHub

GitHub предоставляет API давайте получим данные пользователя erusev

$response = wp_remote_request( 'https://api.github.com/users/erusev' );
print_r( $response );

/* выведет:
Array
(
	[headers] => Array
		(
			[server] => GitHub.com
			[date] => Thu, 10 Dec 2015 10:33:03 GMT
			[content-type] => application/json; charset=utf-8
			[connection] => close
			[status] => 200 OK
			[x-ratelimit-limit] => 60
			[x-ratelimit-remaining] => 57
			[x-ratelimit-reset] => 1449746444
			[cache-control] => public, max-age=60, s-maxage=60
			[last-modified] => Mon, 23 Nov 2015 13:19:37 GMT
			[etag] => W/"c8dad0c81351ce6451a9b7de7f7f0d8b"
			[vary] => Array
				(
					[0] => Accept
					[1] => Accept-Encoding
				)

			[x-github-media-type] => github.v3
			[x-xss-protection] => 1; mode=block
			[x-frame-options] => deny
			[content-security-policy] => default-src 'none'
			[access-control-allow-credentials] => true
			[access-control-expose-headers] => ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
			[access-control-allow-origin] => *
			[strict-transport-security] => max-age=31536000; includeSubdomains; preload
			[x-content-type-options] => nosniff
			[x-served-by] => a241e1a8264a6ace03db946c85b92db3
			[content-encoding] => gzip
			[x-github-request-id] => 05659C50:1D261:3E06B1C:566954DF
		)

	[body] => {"login":"erusev","id":184170 и т.д.}
	[response] => Array
		(
			[code] => 200
			[message] => OK
		)

	[cookies] => Array
		(
		)

	[filename] =>
)
*/
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_request() WP 6.4.3

function wp_remote_request( $url, $args = array() ) {
	$http = _wp_http_get_object();
	return $http->request( $url, $args );
}