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
(рядок) (обов’язковий)
УРЛ сторінку, яку потрібно отримати.
$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 );

// продовжуємо виконувати код

нотатки

список змін

З версії 2.7.0Введено.

Код wp_remote_get() WP 6.0.2

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *