Лучшие библиотеки http на PHP

В современном мире веб-приложения часто зависят от сервисов, которые предоставляют сторонние приложения через REST API. Эти приложения открывают доступ к определённым точкам, где вы можете получать, обновлять или удалять информацию в зависимости от вашего запроса. Однако, чтобы сделать это на вашем сервере, вам нужен подходящий Http-клиент, который будет выполнять запросы за вас. На рынке представлено множество библиотек, и выбор подходящей может быть непростым. Вам нужно самостоятельно решить, какая библиотека лучше всего соответствует вашим требованиям, основываясь на её возможностях. В этой статье мы расскажем о семи лучших клиентских библиотеках Http для PHP, которые упростят взаимодействие с приложениями по всему миру через API.

Yii2 Httpclient

Httpclient Yii2 является расширением платформы Yii Framework и позволяет вам реализовать полезный Http-клиент с помощью пары строк кода. Чтобы отправлять HTTP-запросы, вам нужно создать экземпляр [[\yii\httpclient\Client]] и использовать его метод createRequest() для создания нового HTTP-запроса. Затем вам следует настроить все параметры запроса в соответствии с вашей целью и отправить запрос. В результате вы получите экземпляр [[\yii\httpclient\Response]], который содержит всю информацию об ответе и данные. Например:

use yii\httpclient\Client;

$client = new Client();
$response = $client->createRequest()
    ->setMethod('POST')
    ->setUrl('http://example.com/api/1.0/users')
    ->setData(['name' => 'John Doe', 'email' => 'johndoe@example.com'])
    ->send();
if ($response->isOk) {
    $newUserId = $response->data['id'];
}

Buzz

Buzz – это облегченная библиотека PHP 5.3 для отправки HTTP-запросов. Buzz был создан Крисом Уоллсмитом в 2010 году. За прошедшие годы проект стал очень популярным, его загрузили более 7 миллионов раз. С августа 2017 года Тобиас Найхолм поддерживает эту библиотеку. Идея Buzz останется прежней: у нас должен быть простой API и имитация поведения браузера для удобства тестирования. Нам не следует изобретать велосипед, и мы не должны быть такими же мощными и гибкими, как другие клиенты (например, жадничать). Тем не менее, мы очень серьезно относимся к производительности.

Мы действительно любим PSR, и это список пожеланий, которые мы хотели бы поддержать в PSR:

  • PSR-1 (Code style)
  • PSR-2 (Code style)
  • PSR-4 (Auto loading)
  • PSR-7 (HTTP messages)
  • PSR-15 (HTTP middlewares)
  • PSR-17 (HTTP factories)
  • PSR-18 (HTTP client)

Синтаксис Buzz также удобен и прост в написании:

<?php

$browser = new Buzz\Browser();
$response = $browser->get('http://www.google.com');

echo $browser->getLastRequest()."\n";
// $response is an object. 
// You can use $response->getContent() or $response->getHeaders() to get only one part of the response.
echo $response; 

Requests

Requests – это HTTP-библиотека, написанная на PHP и предназначенная исключительно для удобства использования. Она в общих чертах основана на API из превосходной библиотеки Requests Python. Requests имеет лицензию ISC (аналогичную новой лицензии BSD) и не имеет зависимостей, за исключением PHP 5.2+. Несмотря на то, что PHP используется в качестве веб-языка, его инструментов для отправки HTTP-запросов крайне не хватает. У cURL, мягко говоря, интересный API, и вы не всегда можете положиться на его доступность. Сокеты предоставляют только низкоуровневый доступ и требуют, чтобы вы сами выполняли большую часть синтаксического анализа HTTP-ответов. Его синтаксис довольно дружелюбен и прост в использовании:

$headers = array('Accept' => 'application/json');
$options = array('auth' => array('user', 'pass'));
$request = Requests::get('https://api.github.com/gists', $headers, $options);

var_dump($request->status_code);
// int(200)

var_dump($request->headers['content-type']);
// string(31) "application/json; charset=utf-8"

var_dump($request->body);
// string(26891) "[...]"

Requests позволяют отправлять HTTP-запросы HEAD, GET, POST, PUT, DELETE и PATCH. Вы можете добавлять заголовки, данные формы, составные файлы и параметры с помощью простых массивов и получать доступ к данным ответа таким же образом. В Requests используются cURL и fsockopen, в зависимости от того, что доступно в вашей системе, но они устраняют все неприятные моменты, предоставляя согласованный API.

Httplug

PHP-HTTP – это следующий шаг в стандартизации HTTP-взаимодействия для PHP-пакетов. Он основан на PSR-7, который определяет интерфейсы для HTTP-запросов и ответов. Однако PSR-7 не описывает, как вы должны создавать запросы или отправлять их. PHP-HTTP стремится восполнить этот пробел, предлагая клиентский интерфейс HTTP: HTTPlug.

PHP-HTTP преследует три цели:

  1. Поощряйте разработчиков пакетов полагаться на простой интерфейс HTTPlug, а не на конкретные HTTP-клиенты.
  2. Предоставляйте сообществу PHP высококачественные пакеты, связанные с HTTP.
  3. Со временем сделайте HTTPlug рекомендацией по стандартам PHP (PSR), чтобы клиенты могли напрямую внедрять интерфейс HTTPlug и наши адаптеры больше не требовались.

HTTPlug использует HTTP-клиенты, написанные на PHP, и предлагает простой интерфейс. Он также предоставляет независимую от реализации систему плагинов для создания конвейеров независимо от используемой реализации HTTP-клиента.

Httpful

Httpful – это простая, понятная библиотека PHP, предназначенная для того, чтобы упростить использование HTTP. Она позволяет разработчику сосредоточиться на взаимодействии с API вместо просмотра страниц curl set_opt и является идеальным клиентом для PHP REST. Функции Httpful:

  • Поддержка удобочитаемых HTTP-методов (GET, PUT, POST, DELETE, HEAD и ОПЦИИ)
  • Пользовательские заголовки
  • Автоматический “умный” синтаксический анализ
  • Автоматическая сериализация полезной нагрузки
  • Базовая аутентификация
  • Аутентификация сертификата на стороне клиента
  • Запросить “Шаблоны”
// Make a request to the GitHub API with a custom
// header of "X-Trvial-Header: Just as a demo".
$url = "https://api.github.com/users/nategood";
$response = \Httpful\Request::get($url)
    ->expectsJson()
    ->withXTrivialHeader('Just as a demo')
    ->send();
 
echo "{$response->body->name} joined GitHub on " .
                        date('M jS', strtotime($response->body->created_at)) ."\n";

Unirest PHP

Unirest – это набор облегченных HTTP-библиотек, доступных на нескольких языках, созданных и поддерживаемых компанией Mashape, которая также поддерживает API Gateway Kong с открытым исходным кодом. Эта библиотека содержит:

  • Служебные методы для вызова запросов GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH
  • Поддерживает параметры формы, загрузку файлов и пользовательские основные объекты
  • Поддерживает gzip
  • Supports Basic, Digest, Negotiate, NTLM Authentication natively
  • Настраиваемый тайм-аут
  • Настраиваемые заголовки по умолчанию для каждого запроса (DRY)
  • Automatic JSON parsing into a native object for JSON responses
$headers = array('Accept' => 'application/json');
$query = array('foo' => 'hello', 'bar' => 'world');

$response = Unirest\Request::post('http://mockbin.com/request', $headers, $query);

$response->code;        // HTTP Status code
$response->headers;     // Headers
$response->body;        // Parsed body
$response->raw_body;    // Unparsed body

Guzzle

Guzzle – это HTTP-клиент на PHP, который упрощает отправку HTTP-запросов и интеграцию с веб-сервисами. Особенности Guzzle:

  • Простой интерфейс для создания строк запросов, POST-запросов, потоковой передачи больших загрузок, потоковой передачи больших загрузок, использования HTTP-файлов cookie, загрузки данных в формате JSON и т.д…
  • Может отправлять как синхронные, так и асинхронные запросы, используя один и тот же интерфейс.
  • Использует интерфейсы PSR-7 для запросов, ответов и потоков. Это позволяет вам использовать другие библиотеки, совместимые с PSR-7, с Guzzle.
  • Абстрагируется от базового HTTP-транспорта, позволяя вам писать независимый от среды и транспорта код, т.е. не зависеть от cURL, потоков PHP, сокетов или неблокирующих циклов обработки событий.
  • Система промежуточного программного обеспечения позволяет вам расширять и корректировать поведение клиента.
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.github.com/user', [
    'auth' => ['user', 'pass']
]);
echo $res->getStatusCode();
// "200"
echo $res->getHeader('content-type');
// 'application/json; charset=utf8'
echo $res->getBody();
// {"type":"User"...'

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.