✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Як користуватися Guzzle – клієнтом PHP HTTP для надсилання запитів HTTP

54

Розробник завжди стикається із завданням, де їм потрібно надсилати HTTP-запити на інші ресурси та обробляти відповідь. Популярним способом виконання цих завдань є використання curl. Однак використання curl не відносно просто для початківців. Крім того, щоб написати сценарій на cURL, ваш сервер повинен був увімкнути розширення cURL.

Guzzle – це альтернатива cURL. Це PHP-клієнт HTTP, який полегшує надсилання HTTP-запитів та тривіальну інтеграцію з веб-службами. Навіть, я можу сказати зі свого досвіду, що Guzzle кращий за cURL. Він простий і простий у використанні. Якщо ви використовуєте Guzzle, вам не потрібно мати розширення cURL на вашому сервері. Це дає вам краще форматування коду порівняно з cURL.

З огляду на це, давайте подивимося, як використовувати Guzzle у вашому додатку.

Встановлення

Рекомендований спосіб встановлення Guzzle – через Composer. Якщо ви не встановили Composer у своїй системі, ви можете завантажити його звідси.

Як користуватися Guzzle - клієнтом PHP HTTP для надсилання запитів HTTP

Відкрийте термінал у кореневому каталозі проекту та запустіть команду нижче, щоб встановити Guzzle.

composer require guzzlehttp/guzzle

Guzzle забезпечує підтримку всіх запитів HTTP, які GET, DELETE, HEAD, OPTIONS, PATCH, POST і PUT. У цьому посібнику ми вивчаємо, як використовувати Guzzle для надсилання HTTP-запитів та обробляти відповіді на нього.

Як приклад, я беру службу REQ | RES, яка забезпечує підроблений реальний API для тестування HTTP-запитів.

Як надіслати запит HTTP за допомогою Guzzle

Після встановлення бібліотеки Guzzle вам потрібно включити середовище Guzzle у свій файл наступним чином.

<?php
require_once "vendor/autoload.php";
 
use GuzzleHttpClient;

Тепер спробуємо кілька операцій по черзі, як GET, POST, завантаження файлів, копіювання файлу з віддаленої URL-адреси в локальний каталог, PUT, PATCH та DELETE.

ОТРИМАТИ запит за допомогою Guzzle

Якщо ви подивитесь на веб-сайт REQ | RES, вони надали кілька кінцевих точок для запитів «ОТРИМАТИ». Я візьму приклад із кінцевої точки "СПИСОК КОРИСТУВАЧІВ". Для отримання списку користувачів вони просять надіслати запит GET цій кінцевій точці https://reqres.in/api/users?page=2.

У Guzzle ми надішлемо цей запит GET наступним чином.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://reqres.in',
]);
  
$response = $client->request('GET', '/api/users', [
    'query' => [
        'page' => '2',
    ]
]);
 
//get status code using $response->getStatusCode();
 
$body = $response->getBody();
$arr_body = json_decode($body);
print_r($arr_body);

Спочатку я витягнув ‘base_uri’ (загальну URL-адресу) як https://reqres.in. Тут кінцевою кінцевою точкою є ‘/ api / users’, і для цього потрібен параметр GET як ‘сторінка’. У Guzzle ви можете надсилати параметри GET, використовуючи масив ‘query’, як показано в наведеному вище коді.

POST-запит за допомогою Guzzle

Зазвичай існує 2 типи запитів POST. Можливо, вам знадобиться POST-параметри як запит POST "application / x-www-form-urlencoded" або завантажити дані, закодовані JSON, як тіло запиту. Ви можете розміщувати закодовані дані у форматі JSON, як показано нижче.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://reqres.in',
]);
 
$response = $client->request('POST', '/api/users', [
    'json' => [
        'name' => 'Sam',
        'job' => 'Developer'
    ]
]);
 
//get status code using $response->getStatusCode();
 
$body = $response->getBody();
$arr_body = json_decode($body);
print_r($arr_body);

У випадку запиту POST "application / x-www-form-urlencoded" ви можете POST-параметри наступним чином.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'BASE_URL_ENDPOINT',
]);
 
$client->request('POST', '/endpoint_here', [
   'form_params' => [
       'foo' => 'bar',
       'baz' => ['hi', 'there!']
   ]
]);

У деяких випадках кінцеві точки API просять надіслати маркер авторизації у кожному запиті HTTP. Користувач може надіслати цей маркер як заголовки у вашому запиті Guzzle.

<?php
$client->request('POST', '/endpoint_here', [
    "headers" => [
        "Authorization" => "Bearer TOKEN_VALUE"
    ],
    'form_params' => [
       'foo' => 'bar',
       'baz' => ['hi', 'there!']
    ]
]);

Скопіюйте файл із віддаленого сервера за допомогою Guzzle

Якщо ви хочете скопіювати файл з віддаленого сервера у ваш локальний каталог, тоді Guzzle буде кращим варіантом. Скажімо, ви хочете скопіювати це зображення за адресою https://artisansweb.net/wp-content/uploads/2020/03/blog.jpg як "blog.jpg" у свій локальний каталог. Ми напишемо код для нього, як показано нижче.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
$fp = fopen('blog.jpg', 'wb');
 
$client = new GuzzleHttpClient();
$request = $client->get('https://artisansweb.net/wp-content/uploads/2020/03/blog.jpg', ['sink' => $fp]);
 
fclose($fp);

Завантаження файлів за допомогою Guzzle

Як ми всі знаємо, для завантаження файлів нам потрібно встановити тіло запиту у форму "multipart / form-data". Основний код у Guzzle для завантаження файлів буде записаний, як показано нижче.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'BASE_URL_HERE',
]);
 
$client->request('POST', '/endpoint_here', [
    'multipart' => [
        [
            'name'     => 'files', // name value requires by endpoint
            'contents' => fopen('/path/to/file', 'r'),
            'filename' => 'custom_image.jpg'
        ],
    ]
]);

Щоб продемонструвати завантаження файлу, я візьму живий приклад API reSmush.it, який у відповідь надсилає оптимізовану версію зображення. Вам потрібно розмістити своє зображення до кінцевої точки. Код для нього з використанням Guzzle наступний.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
 
try {
    $client = new Client([
        // Base URI is used with relative requests
        'base_uri' => 'http://api.resmush.it',
    ]);
 
    $response = $client->request('POST', "?qlty=92", [
        'multipart' => [
            [
                'name'     => 'files', // name value requires by endpoint
                'contents' => fopen(getcwd().'/blog.jpg', 'r'),
                'filename' => 'blog.jpg',
                'headers'  => array('Content-Type' => mime_content_type(getcwd().'/blog.jpg'))
            ]
        ]
    ]);
 
    if (200 == $response->getStatusCode()) {
        $response = $response->getBody();
        $arr_result = json_decode($response);
        print_r($arr_result);
    }
} catch (Exception $e) {
    echo $e->getMessage();
}

PUT, PATCH і DELETE Запит за допомогою Guzzle

Запити PUT та PATCH використовуються для оновлення ресурсів. Однак ці 2 запити роблять це по-різному.

PUT перезаписує всю сутність, якщо вона вже існує, і створює новий ресурс, якщо вона не існує. Якщо ви хочете оновити ім’я людини, вам потрібно надіслати весь ресурс, коли робите запит PUT.

<?php
<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
  
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://reqres.in',
]);
  
$response = $client->request('PUT', '/api/users/2', [
    'json' => [
        'name' => 'Sam',
        'job' => 'Developer'
    ]
]);
  
//get status code using $response->getStatusCode();
 
$body = $response->getBody();
$arr_body = json_decode($body);
print_r($arr_body);

Запит PATCH застосовує часткове оновлення до ресурсу. Це означає, що вам потрібно надіслати лише ті дані, які ви хочете оновити, і це не вплине чи змінить нічого іншого. Отже, якщо ви хочете оновити ім’я людини, вам потрібно буде лише надіслати параметр імені.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
  
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://reqres.in',
]);
  
$response = $client->request('PATCH', '/api/users/2', [
    'json' => [
        'name' => 'Sam',
    ]
]);
  
//get status code using $response->getStatusCode();
 
$body = $response->getBody();
$arr_body = json_decode($body);
print_r($arr_body);

Запит на ВИДАЛЕННЯ є прямим. Вам просто потрібно досягти кінцевої точки наступним чином.

<?php
require_once "vendor/autoload.php";
  
use GuzzleHttpClient;
  
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'https://reqres.in',
]);
  
$response = $client->request('DELETE', '/api/users/2');
  
echo $response->getStatusCode(); //should gives 204

Сподіваюся, ви дізналися про Guzzle та основи його використання. Ви можете прочитати більше про параметри запитів Guzzle в їх документації. Будь ласка, поділіться своїми думками чи пропозиціями у розділі коментарів нижче.

Пов’язані статті

Джерело запису: artisansweb.net

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі