wp_remote_get()
Отримує віддалену сторінку, використовуючи HTTP GET метод. Обгортка для використання curl. Результат містить HTTP заголовки та дані самої станиці, і повертається у вигляді масиву.
Для методу HTTP POST, використовуйте аналогічну функцію: wp_remote_post() .
Читайте докладну статтю про HTTP API .
Безпечний аналог цієї функції: wp_safe_remote_get()
Хуків немає.
Повертає
Массив|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 .
За замовчуванням: 5redirection — кількість, скільки разів переходити по редиректах, якщо вони є.
Значення можна змінити у плагіні через фільтр “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()
Приклади
#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] => ) */
#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 ); // поверне '' якщо помилка
#3 Відправимо запит, що не блокує
Цей приклад показує, як надіслати неблокуючий запит. Він потрібен щоб просто зробити запит і продовжити виконувати поточний код, не звертаючи уваги на те, що повернулося у відповіді:
$remote_url = 'https://site.com/wp-cron.php'; $args = [ 'timeout' => 0.01, 'blocking' => false, 'sslverify' => false, ]; $result = wp_remote_post( $remote_url, $args ); // продовжуємо виконувати код
нотатки
- Дивіться: wp_remote_request() Для більшої інформації на відповідній форматі .
- Дивіться: WP_Http::request() For default arguments information.
список змін
З версії 2.7.0 | Введено. |
Код wp_remote_get() wp remote get WP 6.0.2
function wp_remote_get( $url, $args = array() ) { $http = _wp_http_get_object(); return $http->get($url, $args); }