Протокол передачи гипертекста (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 для обслуживания различных сред и конфигураций хостинга.
Отправка запросов через 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 предоставляет следующие вспомогательные функции:
- wp_remote_retrieve_body () — извлекает только тело из ответа.
- wp_remote_retrieve_headers () — возвращает массив всех HTTP-заголовков ответа.
- wp_remote_retrieve_header () — возвращает значение заголовка HTTP на основе предоставленного имени.
- wp_remote_retrieve_response_code () — возвращает коды состояния ответа HTTP-запроса.
Чтобы извлечь только тело ответа 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 .