...
✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kuidas kasutada Guzzle’i – PHP HTTP-klienti HTTP-päringute saatmiseks

16

Arendaja leiab alati ülesande, kus ta peab saatma HTTP-päringud teistele ressurssidele ja vastusega hakkama saama. Populaarne viis nende ülesannete täitmiseks on kasutada CURL-i. CURL-i kasutamine pole aga algajal suhteliselt lihtne. Ka skripti kirjutamiseks cURL-is peaks teie server olema lubanud laienduse cURL.

Guzzle on alternatiiv CURL- ile. See on PHP HTTP klient, mis hõlbustab HTTP-päringute saatmist ja on triviaalne integreerimine veebiteenustega. Isegi, võin öelda oma kogemuste põhjal, et Guzzle on parem kui CURL. See on lihtne ja hõlpsasti kasutatav. Kui kasutate Guzzle’i, ei pea te oma serveris olema CURL-laiendit. See annab teile koodi parema vormingu võrreldes CURL-iga.

Nagu öeldud, vaatame, kuidas Guzzle’i oma rakenduses kasutada.

Paigaldamine

Soovitatav viis Guzzle’i installimiseks on helilooja. Kui te pole Composerit oma süsteemi installinud, saate selle siit.

Kuidas kasutada Guzzle'i - PHP HTTP-klienti HTTP-päringute saatmiseks

Avage terminal oma projekti juurkataloogis ja käivitage Guzzle’i installimiseks järgmine käsk.

composer require guzzlehttp/guzzle

Guzzle toetab kõiki HTTP-päringuid, milleks on GET, DELETE, HEAD, OPTIONS, PATCH, POST ja PUT. Selles õpetuses uurime, kuidas kasutada Guzzle’i HTTP-päringute saatmiseks ja kuidas sellega vastuseid käsitleda.

Näitena võtan teenuse REQ | RES, mis pakub HTTP-päringute testimiseks võltsitud reaalset API-d.

Kuidas saata HTTP-päringut Guzzle’i abil

Guzzle’i teegi installimisel peate oma faili lisama Guzzle’i keskkonna järgmiselt.

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

Proovime nüüd ükshaaval mõnda toimingut, näiteks GET, POST, File upload, faili kopeerimine kaug-URL-ist kohalikku kataloogi, PUT, PATCH ja DELETE.

GET Taotlege Guzzle’i abil

Kui vaatate veebisaiti REQ | RES, pakkusid nad GET-päringute jaoks paar lõpp-punkti. Võtan näite „LOENDA KASUTAJAD” lõpp-punktist. Kasutajate loendi hankimiseks paluvad nad saata sellele lõpp-punktile GET-päringu https://reqres.in/api/users?page=2.

Guzzlis saadame selle GET-päringu järgmiselt.

<?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);

Kõigepealt eraldasin ‘base_uri’ (ühise URL-i) aadressina https://reqres.in. Siin on lõplik lõpp-punkt ‘/ api / users’ ja see nõuab ‘page’ -na GET-parameetrit. Guzzle’is saate GET-parameetreid saata massiivi ‘query’ abil, nagu on näidatud ülaltoodud koodis.

POSTI Taotlus Guzzle’i abil

Tavaliselt on POST-päringuid kahte tüüpi. Võimalik, et peate POST-i parameetrid saatma POST-taotlusena „application / x-www-form-urlencoded" või päringu kehana üles laadima JSON-i kodeeritud andmed. Võite postitada JSON-i kodeeritud andmed, nagu allpool näidatud.

<?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-taotluse ‘application / x-www-form-urlencoded’ korral saate parameetrid POSTIDA järgmiselt.

<?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!']
   ]
]);

Mõnel juhul paluvad API lõpp-punktid teil iga HTTP-päringu korral saata autoriseerimisluba. Kasutaja saab selle loa päistena saata teie Guzzle’i taotluses.

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

Kopeerige fail kaugserverist Guzzle’i abil

Kui soovite kopeerida faili kaugserverist kohalikku kataloogi, on Guzzle parem valik. Oletame, et soovite selle pildi aadressil https://artisansweb.net/wp-content/uploads/2020/03/blog.jpg kopeerida kui „blog.jpg” oma kohalikku kataloogi. Kirjutame selle koodi, nagu allpool näidatud.

<?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);

Failide üleslaadimine Guzzle’i abil

Nagu me kõik teame, peame failide üleslaadimiseks määrama päringu kehaks vormi „mitmeosaline / vorm-andmed”. Failide üleslaadimise põhikood Guzzle’is kirjutatakse allpool.

<?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'
        ],
    ]
]);

Failide üleslaadimise demonstreerimiseks võtan reSmush.it API reaalajas näite, mis saadab vastuseks pildi optimeeritud versiooni. Peate oma pildi postitama nende lõpp-punkti. Selle kood Guzzle’i abil järgmiselt.

<?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();
}

Pane, plaaster ja kustuta Taotle Guzzle’i abil

Ressursside värskendamiseks kasutatakse PUT- ja PATCH-päringuid. Need 2 taotlust teevad aga teisiti.

PUT kirjutab kogu üksuse üle, kui see juba olemas on, ja loob uue ressursi, kui seda pole. Kui soovite värskendada inimese nime, peate PUT-päringu esitamisel saatma kogu ressursi.

<?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-taotlus rakendab ressursile osalise värskenduse. See tähendab, et peate saatma ainult andmed, mida soovite värskendada, ja see ei mõjuta ega muuda midagi muud. Nii et kui soovite värskendada inimese nime, peate saatma ainult nime parameetri.

<?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);

Kustutamise taotlus on otse edasi saadetud. Peate lihtsalt tabama lõpp-punkti järgmiselt.

<?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

Loodan, et õppisite tundma Guzzle’i ja selle kasutamise põhitõdesid. Võite Guzzle Request Options’i kohta lugeda nende dokumentatsioonist. Palun jagage oma mõtteid või ettepanekuid allpool olevas kommentaaride jaotises.

seotud artiklid

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem