Статьи

Взгляд на API WordPress HTTP: краткий обзор wp_remote_get

Когда дело доходит до выполнения удаленных запросов в контексте веб-сайтов, веб-приложений и даже проектов на основе WordPress, модель, которой мы руководствуемся, обычно одинакова:

  • Инициировать запрос на стороне сервера
  • Обработайте ответ, когда он получен, читая ответ или ловя ошибку
  • Вернуть ответ звонящему

Этот конкретный формат тот же, который используется как в синхронной, так и в асинхронной (или на основе Ajax) функциональности. Дело в том, что если вы создаете стандартное веб-приложение с использованием PHP, Rails, Java, .NET или любой другой платформы, то у каждого из них есть свои способы сделать это.

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

В этой серии из четырех частей мы рассмотрим, что означает создание удаленного запроса GET , а во второй части мы рассмотрим практический подход к этому.

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

Но сначала давайте посмотрим, что вообще означает сделать запрос.


Проще говоря, удаленный запрос — это когда один сервер отправляет запрос другому серверу. Это может принимать несколько форм — иногда он отправляет данные, иногда просто запрашивает, доступен ли сервер, а иногда запрашивает данные.

В этой серии статей мы рассмотрим, что означает запрос данных с другого сервера. Но сначала, вот как вы можете концептуально смоделировать один сервер, разговаривая с другим, делая запрос, а затем обрабатывая данные:

Удаленные запросы

Достаточно легко понять, верно?

Для опытных разработчиков, которые читают это, вы знаете, что здесь могут быть некоторые сложные темы — возможно, должна произойти аутентификация (например, использование ключей и / или токенов), и вы знаете, что ответ не всегда быть четким, как то, что определено — но правда в том, что если вы посмотрите на процесс с абстрактной точки зрения, это то, что вы в конечном итоге увидите.


Это варьируется от приложения к приложению, но, как упоминалось ранее в этой статье, мы в основном сосредоточены на PHP и WordPress, и поэтому способ, которым запросы обычно выполняются в PHP, использует одну из двух функций:

  • file_get_contents
  • curl

Оба они могут использоваться для удаленных запросов, но один немного более гибкий, чем другой.

По сути, file_get_contents принимает строку — в основном URL-адрес — и возвращает запрашиваемые данные (или ложь в случае сбоя).

Это, пожалуй, самый распространенный способ, которым начинающие разработчики будут делать удаленные запросы. По правде говоря, я часто делал это — и продолжаю делать, в зависимости от требований веб-приложения — но это тема для другой серии.

Подробности о file_get_contents можно прочитать в руководстве по PHP. Хотя мы собираемся взглянуть на способ создания удаленных запросов на WordPress, я рекомендую проверить этот конкретный API, чтобы ознакомиться с его возможностями.

cURL — часто пишется curl — сокращение от «клиентской библиотеки URL». Как и следует из названия, это целая библиотека, а не функция, которая предоставляет разработчикам полный набор функций для выполнения удаленных запросов.

В дополнение к простому запросу данных со стороннего URL, вы можете установить такие параметры, как:

  • Как обрабатывать номера ошибок
  • Получить информацию о конкретном переводе
  • Инициировать, выполнить или закрыть сеанс
  • Ждите активности на определенном соединении
  • …и более

Очевидно, что с этой конкретной библиотекой можно многому научиться, и многое еще происходит.

Лично, если вы продвинутый разработчик, я фанат использования cURL в контексте веб-приложений на основе PHP для надежного уровня управления, который он предлагает.

Если вы не знакомы с этой библиотекой, я настоятельно рекомендую прочитать ее в руководстве по PHP.


Конечно, как уже упоминалось в статье, file_get_contents и cURL важно знать в PHP и часто используются в контексте проектов WordPress; Тем не менее, есть предпочтительная функция для использования в WordPress.

Помните, так же, как мы рассмотрели стандарты кодирования WordPress, чтобы понять, как лучше всего писать код на основе WordPress, нам также нужно взглянуть на доступные нам API, чтобы убедиться, что мы делаем то, что рекомендует WordPress.

Поэтому, когда речь идет о выполнении запросов GET для WordPress, нам доступна wp_remote_get .

Функция принимает два аргумента:

  • URL, на который делается запрос
  • Массив аргументов для отправки вместе с запросом

Массив аргументов немного выходит за рамки данной статьи; Тем не менее, соответствующая статья о Кодексе содержит краткое описание того, что мы можем отправить вместе с нашим запросом.

Вот некоторые примеры:

  • Как долго до истечения времени ожидания
  • Версия протокола HTTP для использования
  • Заголовки
  • Печенье
  • …и более

Наконец, функция будет запрашивать весь массив данных после отправки ответа. Например:

  • Заголовки с сервера, на который был сделан запрос
  • Тип содержимого ответа
  • Фактический ответ
  • … и многое другое

Мы поговорим об ответе в третьей статье этой серии.

Очевидно, что функция достаточно проста для понимания, но она действительно мощная. Для тех, кому интересно, часть HTTP API WordPress (частью которой является эта функция) использует библиотеку cURL внутри.


Тем не менее, инициирование запроса с помощью wp_remote_get действительно легко. Фактически, мы собираемся сделать это в следующей статье этой серии.

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

Мы будем использовать wp_remote_get , обрабатывать ответ соответствующим образом, а затем отображать информацию на экране.