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(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()
-
Примеры
#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 ); // продолжаем выполнять код
#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 ) : [];
Заметки
- Смотрите: wp_remote_request() For more information on the response array format.
- Смотрите: WP_Http::request() For default arguments information.
Список изменений
С версии 2.7.0 | Введена. |
Код wp_remote_get() wp remote get WP 6.4.3
function wp_remote_get( $url, $args = array() ) { $http = _wp_http_get_object(); return $http->get( $url, $args ); }