WordPress как на ладони
rgbcode is looking for WordPress developers. Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

wp_remote_get()WP 2.7.0

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

Для HTTP POST метода, используйте аналогичную функцию: wp_remote_post().

Читайте подробную статью про HTTP API.

Безопасный аналог этой функции: wp_safe_remote_get()

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

Хуков нет.

Возвращает

Массив|WP_Error.

  • Данные ответа в виде массива.
  • WP_Error возвращается в случае неудачного запроса. ОДНАКО, если сервер вернул статус код: 500, 404 и т.д., то вы получите данные ответа, а не WP_Error..

Шаблон использования

$remote_get = wp_remote_get( $url, array(
	'timeout'     => 5,
	'redirection' => 5,
	'httpversion' => '1.0',
	'user-agent'  => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ),
	'blocking'    => true,
	'headers'     => array(),
	'cookies'     => array(),
	'body'        => null,
	'compress'    => false,
	'decompress'  => true,
	'sslverify'   => true,
	'stream'      => false,
	'filename'    => null
) );

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

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

Аргументы запроса, в виде массива.

Полный список параметров смотрите в WP_Http::request().

Могут быть:

  • timeout — время в секундах на получение данных. Время можно изменить в плагине, через фильтр http_request_timeout.
    По умолчанию: 5

  • redirection — число, сколько раз переходить по редиректам, если они есть.
    Значение можно изменить в плагине через фильтр "http_request_redirection_count".

  • user-agent — позволяет установить user-agent. По умолчанию "WordPress/4.0; http://www.example.com", где 4.0 - текущая версия WP, а http://www.example.com - адрес сайта. Значение можно изменить через фильтр http_headers_useragent.

  • blocking — Требуется ли вызывающему коду результат запроса. Позволяет выполнять не блокирующие запросы. По умолчанию true. Если установлено значение false, запрос будет отправлен на удаленный сервер, и результат вернется в вызывающий код немедленно, код при этом будет знать, был ли запрос успешным или неудачным, но не получит никакого ответа от удаленного сервера.

    Полезно это, когда вам нужно просто отправить запрос и не важно что он вернул. (не все серверы поддерживают эту функцию и даже установив этот параметр в false, блокировка все равно может быть будет. Альтернатива: установить timeout в 0.01 секунду).

  • compress — позволяет отправлять тело запроса (body) в сжатом виде.

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

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

  • method — Для передачи HTTP метода (POST, GET, HEAD, PUT DELETE), используйте подходящую функцию wp_remote_request().

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

Примеры

0

#1 Получим внешнюю страницу

$response = wp_remote_get( 'http://www.example.com/index.html' );

$response будет содержать:

/*
Array
(
	[headers] => Array
		(
			[accept-ranges] => bytes
			[cache-control] => max-age=604800
			[content-type] => text/html
			[date] => Fri, 24 Oct 2014 13:07:13 GMT
			[etag] => "359670651"
			[expires] => Fri, 31 Oct 2014 13:07:13 GMT
			[last-modified] => Fri, 09 Aug 2013 23:54:35 GMT
			[server] => ECS (ewr/144C)
			[x-cache] => HIT
			[x-ec-custom-error] => 1
			[content-length] => 1270
			[connection] => close
		)

	[body] => <!doctype html> ...
	[response] => Array
		(
			[code] => 200
			[message] => OK
		)

	[cookies] => Array
		(
		)

	[filename] =>
)
*/
0

#2 Установим параметры при получении удаленной страницы

$response = wp_remote_get(
	'http://www.example.com/index.php?action=foo',
	[
		'timeout' => 120,
		'httpversion' => '1.1'
	]
);

// проверим правильный ли получили ответ
if ( is_wp_error( $response ) ){
	echo $response->get_error_message();
}
elseif( wp_remote_retrieve_response_code( $response ) === 200 ){
	// Все OK, делаем что нибудь с данными $request['body']
	$body = wp_remote_retrieve_body( $response );
}

Или можно проще:

if ( wp_remote_retrieve_response_code( $response ) === 200 ){
	$body = wp_remote_retrieve_body( $response );
}

Или еще проще:

$body = wp_remote_retrieve_body( $response ); // вернет '' если ошибка
0

#3 Отправим неблокирующий запрос

Этот пример показывает как отправить неблокирующий запрос. Он нужен чтобы просто сделать запрос и продолжить выполнять текущий код, не обращая внимание на то что вернулось в ответе:

$remote_url = 'https://site.com/wp-cron.php';

$args = [
	'timeout'   => 0.01,
	'blocking'  => false,
	'sslverify' => false,
];

$result = wp_remote_post( $remote_url, $args );

// продолжаем выполнять код
0

#4 Пример запроса к API Google карт

$url = 'https://maps.googleapis.com/maps/api/geocode/json?';
$lat = 40.7128;
$lng = -74.0060;
$api_key = 'yourApiKey';

$queryParams = http_build_query( [
	'latlng'       => "$lat, $lng",
	'locationType' => 'ROOFTOP',
	'result_type'  => 'street_address|premise',
	'key'          => $api_key,
] );

$resp = wp_remote_get( $url . $queryParams );
$json = wp_remote_retrieve_body( $resp );

$data = $json ? json_decode( $data, true ) : [];

Заметки

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

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

Код wp_remote_get() WP 6.4.3

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