Kuinka käyttää Guzzlea – PHP HTTP -asiakas HTTP-pyyntöjen lähettämiseen
Kehittäjä törmää aina tehtävään, jossa heidän on lähetettävä HTTP-pyynnöt muille resursseille ja käsiteltävä vastausta. Suosittu tapa suorittaa nämä tehtävät on käyttää cURL: ää. CURL: n käyttö ei kuitenkaan ole suhteellisen helppoa aloittelijoille. Palvelimen olisi pitänyt ottaa käyttöön cURL-laajennus myös kirjoittaaksesi komentosarjan cURL-muodossa.
Guzzle on vaihtoehto cURL: lle. Se on PHP HTTP -asiakas, joka helpottaa HTTP-pyyntöjen lähettämistä ja on triviaali integroida verkkopalveluihin. Jopa voin sanoa kokemuksestani, että Guzzle on parempi kuin CURL. Se on yksinkertainen ja helppo käyttää. Jos käytät Guzzlea, sinun ei tarvitse olla CURL-laajennusta palvelimellasi. Se antaa sinulle paremman muotoilun koodiin kuin cURL.
Tästä huolimatta katsotaanpa, miten Guzzlea käytetään sovelluksessasi.
Asennus
Suositeltu tapa asentaa Guzzle on Composer. Jos et ole asentanut Composeria järjestelmääsi, saat sen täältä.
Avaa pääte projektisi juurihakemistossa ja asenna Guzzle suorittamalla seuraava komento.
composer require guzzlehttp/guzzle
Guzzle tukee kaikkia HTTP-pyyntöjä, jotka ovat GET, DELETE, HEAD, OPTIONS, PATCH, POST ja PUT. Tässä opetusohjelmassa tutkitaan, miten Guzzlea käytetään HTTP-pyyntöjen lähettämiseen ja vastausten käsittelemiseen sen kanssa.
Otan esimerkkinä REQ | RES- palvelun, joka tarjoaa väärennetyn todellisen API: n HTTP-pyyntöjen testaamiseen.
Kuinka lähettää HTTP-pyyntö Guzzlen avulla
Kun asennat Guzzle-kirjaston, sinun on sisällytettävä tiedostoon Guzzle-ympäristö seuraavasti.
<?php
require_once "vendor/autoload.php";
use GuzzleHttpClient;
Yritetään nyt muutamia toimintoja yksi kerrallaan, kuten GET, POST, File upload, kopioi tiedosto etä-URL-osoitteesta paikalliseen hakemistoon, PUT, PATCH ja DELETE.
Hanki pyyntö Guzzlen avulla
Jos katsot REQ | RES-verkkosivustoa, he antoivat muutaman päätepisteen GET-pyynnöille. Otan esimerkin LIST USERS -päätteestä. Käyttäjäluettelon saamiseksi he pyytävät lähettämään GET-pyynnön tähän päätepisteeseen https://reqres.in/api/users?page=2.
Guzzlessa lähetämme tämän GET-pyynnön seuraavasti.
<?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);
Ensin puroin ‘base_uri’ (yleinen URL) nimellä https://reqres.in. Tässä lopullinen päätepiste on ‘/ api / users’ ja se vaatii GET-parametrin ‘sivuna’. Guzzlessa voit lähettää GET-parametreja käyttämällä kyselytaulukkoa yllä olevan koodin mukaisesti.
POST-pyyntö Guzzlen avulla
Normaalisti POST-pyyntöjä on 2 tyyppiä. Saatat joutua POST-parametreiksi ‘application / x-www-form-urlencoded’ POST-pyynnönä tai lähettämään JSON-koodatut tiedot pyynnön runkona. Voit lähettää JSON-koodattuja tietoja alla olevan kuvan mukaisesti.
<?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);
Jos kyseessä on ‘application / x-www-form-urlencoded’ POST-pyyntö, voit lähettää parametrit seuraavasti.
<?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!']
]
]);
Joissakin tapauksissa API-päätepisteet pyytävät sinua lähettämään valtuutustunnuksen kuhunkin HTTP-pyyntöön. Käyttäjä voi lähettää tämän tunnuksen otsikoina Guzzle-pyyntösi yhteydessä.
<?php
$client->request('POST', '/endpoint_here', [
"headers" => [
"Authorization" => "Bearer TOKEN_VALUE"
],
'form_params' => [
'foo' => 'bar',
'baz' => ['hi', 'there!']
]
]);
Kopioi tiedosto etäpalvelimesta Guzzlen avulla
Jos haluat kopioida tiedoston etäpalvelimesta paikalliseen hakemistoon, Guzzle on parempi vaihtoehto. Oletetaan, että haluat kopioida tämän kuvan osoitteessa https://artisansweb.net/wp-content/uploads/2020/03/blog.jpg nimellä ‘blog.jpg’ paikalliseen hakemistoon. Kirjoitamme sille koodin alla olevan kuvan mukaisesti.
<?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);
Tiedoston lataus Guzzlella
Kuten me kaikki tiedämme, tiedostojen lataamista varten on asetettava pyynnön runko ‘multipart / form-data’ -lomakkeeseen. Tiedostojen lataamista varten Guzzlen peruskoodi kirjoitetaan alla.
<?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'
],
]
]);
Osoittaakseni tiedoston lataamisen otan reaaliaikaisen esimerkin reSmush.it-sovellusliittymästä, joka lähettää kuvan optimoidun vastauksen. Sinun on lähetettävä kuvasi heidän päätepisteeseensä. Sen koodi Guzzlea käyttäen seuraavasti.
<?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 ja DELETE Pyydä Guzzlella
PUT- ja PATCH-pyyntöjä käytetään resurssien päivittämiseen. Nämä kaksi pyyntöä tekevät sen kuitenkin toisin.
PUT korvaa koko kokonaisuuden, jos se on jo olemassa, ja luo uuden resurssin, jos sitä ei ole olemassa. Jos haluat päivittää henkilön nimen, sinun on lähetettävä koko resurssi, kun teet PUT-pyyntöä.
<?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-pyyntö päivittää resurssin osittain. Se tarkoittaa, että sinun on lähetettävä vain päivitettävät tiedot, eikä se vaikuta tai muuta mitään muuta. Joten jos haluat päivittää henkilön nimen, sinun on lähetettävä vain nimiparametri.
<?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);
DELETE-pyyntö on suoraviivainen. Sinun tarvitsee vain osua päätepisteeseen seuraavasti.
<?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
Toivon, että sait tietää Guzzlesta ja sen käytön perusteista. Voit lukea lisää Guzzlen pyyntöasetuksista heidän dokumentaatiosta. Jaa ajatuksesi tai ehdotuksesi alla olevassa kommenttiosassa.