Статьи

Глубокое погружение в WordPress HTTP API

Протокол передачи гипертекста (HTTP) является бесспорно самым значительным протокол, используемый в Интернете сегодня.

Веб-сервисы, сетевые устройства и рост сетевых вычислений продолжают расширять роль протокола HTTP за пределы пользовательских веб-браузеров, увеличивая при этом количество приложений, требующих поддержки HTTP.

В последнее время компании, предлагающие продукты или услуги конечным пользователям, «APIfying» своих веб-сайтов и / или приложений.

API — интерфейс прикладного программирования — на самом базовом уровне позволяет продукту или услуге взаимодействовать с другими продуктами или услугами.

Таким образом, API позволяет открывать данные и функциональные возможности для других разработчиков, для других предприятий или даже для отделов и подразделений в вашей компании.

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

Кредит: API Evangelist

В PHP есть много возможных способов отправки HTTP-запросов. Примеры включают file_get_contents , fsockopen и cURL .

До WordPress 2.7 разработчики плагинов имели свою собственную реализацию для отправки HTTP-запросов и получения ответа, что было дополнительным бременем для них, потому что они должны были поддерживать его впоследствии, чтобы поддерживать их работу.

HTTP-API WordPress был создан для стандартизации единого API, который обрабатывал все, что касается HTTP, как можно проще. HTTP API поддерживает различные транспорты и реализации HTTP HTTP для обслуживания различных сред и конфигураций хостинга.

WordPress HTTP API

Отправка запросов через HTTP API

Чтобы отправить или сделать запрос к веб-сервису или API, используя WordPress HTTP API, пригодятся следующие вспомогательные функции.

  • wp_remote_get () — отправляет запросы метода HTTP GET.
  • wp_remote_post () — отправляет HTTP-запросы POST.
  • wp_remote_head () — отправляет HTTP-запросы HEAD.
  • wp_remote_request () — отправлять запросы любым пользовательским методом HTTP, будь то GET, POST, HEAD, PUT или DELETE.

Вскоре мы пройдемся по вышеуказанным функциям и посмотрим, как они работают.

Для целей данного руководства все запросы будут отправляться на httpbin.org — HTTP-службу запросов и ответов.

Основные примеры

wp_remote_get( $url, $args ) 

Вышеприведенная функция используется для отправки запроса GET. Он имеет два параметра: URL-адрес или конечную точку ( $url ) и массив деталей аргумента ( $args ).

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

 $url = 'http://httpbin.org/get?a=b&c=d'; $response = wp_remote_get( $url ); 

Все, что делает код, это отправляет запрос GET в конечную точку http://httpbin.org/get где строка запроса — это параметры GET ?a=b&c=d

Использование функции print_r в PHP для печати данных HTTP ( $response ) в удобочитаемом формате показывает следующее:

 Array ( [headers] => Array ( [access-control-allow-credentials] => true [access-control-allow-origin] => * [content-type] => application/json [date] => Mon, 22 Sep 2014 15:46:40 GMT [server] => gunicorn/18.0 [content-length] => 407 [connection] => Close ) [body] => { "args": { "a": "b", "c": "d" }, "headers": { "Accept": "*/*", "Accept-Encoding": "deflate;q=1.0, compress;q=0.5, gzip;q=0.5", "Connection": "close", "Host": "httpbin.org", "User-Agent": "WordPress/4.0; http://localhost/blog", "X-Request-Id": "bb98282e-f428-48c8-a7d4-07660a70cf37" }, "origin": "41.203.67.131", "url": "http://httpbin.org/get?a=b&c=d" } [response] => Array ( [[code]] => 200 [message] => OK ) [cookies] => Array ( ) [filename] => ) 

При более внимательном рассмотрении информации, читаемой человеком, вы увидите, что ответ представляет собой многомерный массив, разбитый на пять частей: заголовки, тело, ответ, файлы cookie и имя файла.

  • headers содержат поля заголовка HTTP запроса и ответа.
  • body — это ответное сообщение, отправленное сервером API или веб-службой.
  • response содержит запрос статуса HTTP-кода .
  • cookies содержат файлы cookie, установленные веб-службой или сервером конечной точки, если таковые имеются.
  • filename содержит местоположение или путь файла, отправляемого в конечную точку API. Это может быть сделано, например, с помощью запроса POST.

Предположим, вы хотите сообщить API, который вы отправляете запрос, чтобы отправляемое тело контента было объектом JSON, включая заголовок Content-type в массиве параметра функции аргумента, как показано ниже.

 $url = 'http://httpbin.org/get?a=b&c=d'; $args = array( 'headers' => array( "Content-type" => "application/json" ) ); $response = wp_remote_get( $url, $args ); 

Для удобного извлечения различных частей ответа, а также для проверки любой возникшей ошибки, HTTP-API WordPress предоставляет следующие вспомогательные функции:

Чтобы извлечь только тело ответа GET-запроса на http://httpbin.org/get , wp_remote_retrieve_body() (который принимает ответ в качестве аргумента).

 $url = 'http://httpbin.org/get?a=b&c=d'; $args = array( 'headers' => array( "Content-type" => "application/json" ) ); $response = wp_remote_get( $url, $args ); $body = wp_remote_retrieve_body( $response ); 

Чтобы получить только заголовок ответа, используйте wp_remote_retrieve_headers() следующим образом.

 $response_headers = wp_remote_retrieve_headers( $response ); print_r( $response_headers ); 

Результат:

 Array ( [access-control-allow-credentials] => true [access-control-allow-origin] => * [content-type] => application/json [date] => Mon, 22 Sep 2014 19:25:57 GMT [server] => gunicorn/18.0 [content-length] => 448 [connection] => Close ) 

Чтобы вернуть значение одного заголовка, скажем, content-type , используется функция wp_remote_retrieve_header() .

 $response_header = wp_remote_retrieve_header( $response, 'content-type' ); print_r( $response_header ); 

Результат:

 application/json 

Чтобы получить только код состояния ответа, используйте wp_remote_retrieve_response_code() .

 $response_code = wp_remote_retrieve_response_code( $response ); print_r( $response_code ); 

Пока wp_remote_retrieve_response_code() получает код состояния ответа, wp_remote_retrieve_response_message получает сообщение о состоянии.

Ниже приведен ответ заголовка, возвращаемый HTTP-запросом.

 [response] => Array ( [[code]] => 200 [message] => OK ) 

Первый вернет 200 (код состояния), а второй OK (сообщение о состоянии).

До сих пор мы рассмотрели различные вспомогательные функции, предоставляемые API-интерфейсом WordPress HTTP, как сделать запрос GET с помощью wp_remote_get() и получить заголовки и тело ответа с помощью вспомогательных функций ответа.

POST-запросы

Функция wp_remote_post() используется для отправки запросов POST.

 $url = 'http://httpbin.org/post'; $args = array( 'body' => array( "name" => "collins", "url" => 'http://w3guy.com' ) ); $response = wp_remote_post( $url, $args ); 

Приведенный выше код представляет собой базовый POST-запрос к конечной точке http://httpbin.org/post с массивом параметров или тела, отправляемых рядом.

Чтобы получить тело ответа, заголовки, код состояния и сообщение, используйте соответствующую вспомогательную функцию ответа, предоставляемую HTTP API.

Head Requests

Для отправки HTTP-запроса с использованием метода HEAD используется функция wp_remote_head() .

 $url = 'http://httpbin.org'; $args = array( 'body' => array( "name" => "collins", "url" => 'http://w3guy.com' ) ); $response = wp_remote_head( $url, $args ); $response_code = wp_remote_retrieve_response_message( $response ); 

Запросы с использованием других методов HTTP

Чтобы отправить запрос PUT, DELETE или любой другой пользовательский метод HTTP, используйте wp_remote_request() .

Пример запроса PUT:

 $url = 'http://httpbin.org'; $args = array( 'method' => 'PUT' ); $response = wp_remote_request( $url, $args ); 

Пример запроса DELETE:

 $url = 'http://httpbin.org'; $args = array( 'method' => 'DELETE' ); $response = wp_remote_request( $url, $args ); 

Функция wp_remote_request() может также использоваться для выполнения запросов GET и POST.

ПОЛУЧИТЬ запрос

 $url = 'http://httpbin.org/get'; $args = array( 'method' => 'GET' ); $response = wp_remote_request( $url, $args ); 

POST запрос

 $url = 'http://httpbin.org/post'; $args = array( 'method' => 'POST' ); $response = wp_remote_request( $url, $args ); 

Расширенная настройка

  • Время timeout аргумента позволяет установить время в секундах, прежде чем соединение будет разорвано и возвращена ошибка.
    Примечание: значение по умолчанию для этого значения составляет 5 seconds .
  • Время ожидания в приведенном ниже запросе GET увеличено до 45 seconds .
 $url = 'http://httpbin.org/get'; $args = array( 'method' => 'GET', 'timeout' => 45, ); $response = wp_remote_request( $url, $args ); 
  • Аргумент user-agent используется для установки user-agent.
  • По умолчанию используется WordPress/4.0; http://w3guy.com WordPress/4.0; http://w3guy.com где 4.0 — номер версии WordPress, а w3guy.com — URL-адрес блога.
 $args = array( 'user-agent' => 'Crawler by w3guy', ); 
  • Аргумент sslverify проверяет, является ли сертификат SSL действительным (не самоподписанным), и отклонит ответ, если это не так.
  • Если вы знаете, что сайт самоподписан, но ему можно доверять, установите значение false .
    Значение по умолчанию всегда true
 $args = array( 'sslverify' => true ); 

Заворачивать

Уф! Мы подошли к концу этого урока. К настоящему времени вы должны знать, что такое API, иметь общее представление о HTTP-API WordPress и о том, как он работает.

В последующих уроках мы увидим больше HTTP API в действии. Обязательно следите за каналом WordPress .