A Guzzle-ügyfelek egy kezelő- és middleware-rendszert használnak a HTTP-kérelmek küldéséhez.
A kezelő függvény elfogad egy Psr\Http\Message\RequestInterface
és egy tömbnyi
kérési opciókból, és visszaad egy GuzzleHttp\Promise\PromiseInterface
, amely a következő
teljesül egy Psr\Http\Message\ResponseInterface
vagy elutasít egy
exception.
Egyéni kezelőt adhatsz az ügyfélnek a handler
opcióval.
kliens konstruktorban. Fontos megérteni, hogy több kérés
a Guzzle által használt opciók megkövetelik, hogy bizonyos köztes szoftverek csomagolják a használt kezelőt.
az ügyfél által használt kezelőt. Biztosíthatja, hogy az ügyfél számára biztosított kezelő használja a
alapértelmezett middlewares-t használja, ha a kezelőt a
GuzzleHttp\HandlerStack::create(callable $handler = null)
statikus módszerrel.
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlHandler;
$handler = new CurlHandler();
$stack = HandlerStack::create($handler); // Wrap w/ middleware
$client = new Client(['handler' => $stack]);
A create
módszer alapértelmezett kezelőket ad hozzá a HandlerStack
-hez. Amikor a HandlerStack
feloldódik, a kezelők a következő sorrendben fognak végrehajtódni:
http_errors
- Nincs op a kérés küldésekor. A válasz állapotkódja a válasz feldolgozásakor a válasz ígéret visszaküldésekor kerül ellenőrzésre. a veremre.allow_redirects
- Nincs op a kérés küldésekor. Következő átirányítások akkor következik be, amikor egy válaszígéret kerül vissza a veremre.cookies
- Cookie-kat ad a kérésekhez.prepare_body
- A HTTP-kérés teste előkészítésre kerül (pl., alapértelmezett fejlécek hozzáadása, mint például Content-Length, Content-Type stb.).- <send request with handler>
prepare_body
- no op on response processing.cookies
- kivonja a válasz sütiket a sütisdobozba.allow_redirects
- Követi az átirányításokat.http_errors
- kivételeket dob, ha a válasz állapotkódja>=
400.
Ha nincs $handler
argumentum megadva, GuzzleHttp\HandlerStack::create()
a legmegfelelőbb kezelőt fogja kiválasztani a rendelkezésre álló kiterjesztések alapján.
rendszeredben rendelkezésre álló bővítmények alapján.
Fontos
Az ügyfél számára biztosított kezelő határozza meg, hogy a kérési opciók hogyan kerülnek alkalmazásra.
és felhasználásra kerülnek az ügyfél által küldött minden egyes kérésnél. Például, ha nem
nincs az ügyfélhez társított cookie-közvetítő, akkor a cookie-közvetítő beállítása
cookies
kérési opciónak nem lesz hatása a kérésre.
A middleware a kezelők funkcionalitását úgy bővíti ki, hogy a kezelőket a válaszok generálásának folyamatában. A middleware magasabb rendű függvényként valósul meg, amely a következő formát ölti.
use Psr\Http\Message\RequestInterface;
function my_middleware()
{
return function (callable $handler) {
return function (RequestInterface $request, array $options) use ($handler) {
return $handler($request, $options);
};
};
}
A middleware függvények egy olyan függvényt adnak vissza, amely elfogadja a következő meghívandó kezelőt. Ez a visszaadott függvény ezután egy másik függvényt ad vissza, amely egy összeállított kezelőként működik - elfogad egy kérést és opciókat, és egy ígéretet ad vissza, amely teljesül egy válasszal. A komponált middleware módosíthatja a kérést, egyéni kérési opciókat adhat hozzá, és módosíthatja a következő lépcsőfok által visszaadott ígéretet. kezelő által visszaadott eredményt.
Íme egy példa a fejléc hozzáadására minden egyes kéréshez.
use Psr\Http\Message\RequestInterface;
function add_header($header, $value)
{
return function (callable $handler) use ($header, $value) {
return function (
RequestInterface $request,
array $options
) use ($handler, $header, $value) {
$request = $request->withHeader($header, $value);
return $handler($request, $options);
};
};
}
Miután létrehoztunk egy middleware-t, hozzáadhatjuk azt egy ügyfélhez az ügyfél által használt kezelő csomagolásával vagy egy kezelő stack díszítésével.
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlHandler;
use GuzzleHttp\Client;
$stack = new HandlerStack();
$stack->setHandler(new CurlHandler());
$stack->push(add_header('X-Foo', 'bar'));
$client = new Client(['handler' => $stack]);
Most, amikor kérést küldesz, az ügyfél a hozzáadott middleware-rel összeállított kezelőt fogja használni, és minden egyes kéréshez hozzáad egy fejlécet.
Íme egy példa egy olyan middleware létrehozására, amely módosítja a downstream kezelő válaszát. Ez a példa egy fejlécet ad a válaszhoz.
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlHandler;
use GuzzleHttp\Client;
function add_response_header($header, $value)
{
return function (callable $handler) use ($header, $value) {
return function (
RequestInterface $request,
array $options
) use ($handler, $header, $value) {
$promise = $handler($request, $options);
return $promise->then(
function (ResponseInterface $response) use ($header, $value) {
return $response->withHeader($header, $value);
}
);
};
};
}
$stack = new HandlerStack();
$stack->setHandler(new CurlHandler());
$stack->push(add_response_header('X-Foo', 'bar'));
$client = new Client(['handler' => $stack]);
A kérést módosító middleware létrehozása sokkal egyszerűbbé válik a
GuzzleHttp\Middleware::mapRequest()
middleware. Ez a middleware elfogadja
egy függvényt, amely elfogadja a kérés argumentumát és visszaadja a küldendő kérést.
use Psr\Http\Message\RequestInterface;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlHandler;
use GuzzleHttp\Client;
use GuzzleHttp\Middleware;
$stack = new HandlerStack();
$stack->setHandler(new CurlHandler());
$stack->push(Middleware::mapRequest(function (RequestInterface $request) {
return $request->withHeader('X-Foo', 'bar');
}));
$client = new Client(['handler' => $stack]);
A válasz módosítása is sokkal egyszerűbb a GuzzleHttp\Middleware::mapResponse()
middleware segítségével.
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlHandler;
use GuzzleHttp\Client;
use GuzzleHttp\Middleware;
$stack = new HandlerStack();
$stack->setHandler(new CurlHandler());
$stack->push(Middleware::mapResponse(function (ResponseInterface $response) {
return $response->withHeader('X-Foo', 'bar');
}));
$client = new Client(['handler' => $stack]);
A kezelő stack egy alap kezelőre alkalmazandó middleware stacket jelent. funkciót. A veremre tolhatsz middleware-t, hogy a verem tetejére kerüljön, és visszatolhatsz middleware-t a veremre, hogy a verem aljához adj hozzá. Amikor a a verem feloldásra kerül, a kezelőt a veremre toljuk. Minden érték Ezután minden értéket leemel a veremről, az előző értéket a veremről leemelt értékre csomagolva. veremre.
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;
use GuzzleHttp\Utils;
use Psr\Http\Message\RequestInterface;
$stack = new HandlerStack();
$stack->setHandler(Utils::chooseHandler());
$stack->push(Middleware::mapRequest(function (RequestInterface $r) {
echo 'A';
return $r;
}));
$stack->push(Middleware::mapRequest(function (RequestInterface $r) {
echo 'B';
return $r;
}));
$stack->push(Middleware::mapRequest(function (RequestInterface $r) {
echo 'C';
return $r;
}));
$client->request('GET', 'http://httpbin.org/');
// echoes 'ABC';
$stack->unshift(Middleware::mapRequest(function (RequestInterface $r) {
echo '0';
return $r;
}));
$client = new Client(['handler' => $stack]);
$client->request('GET', 'http://httpbin.org/');
// echoes '0ABC';
A middleware-nek nevet adhat, ami lehetővé teszi a middleware hozzáadását a más megnevezett middleware-ek előtt, más megnevezett middleware-ek után, vagy eltávolíthat middleware-eket. név alapján.
use Psr\Http\Message\RequestInterface;
use GuzzleHttp\Middleware;
// Add a middleware with a name
$stack->push(Middleware::mapRequest(function (RequestInterface $r) {
return $r->withHeader('X-Foo', 'Bar');
}, 'add_foo'));
// Add a middleware before a named middleware (unshift before).
$stack->before('add_foo', Middleware::mapRequest(function (RequestInterface $r) {
return $r->withHeader('X-Baz', 'Qux');
}, 'add_baz'));
// Add a middleware after a named middleware (pushed after).
$stack->after('add_baz', Middleware::mapRequest(function (RequestInterface $r) {
return $r->withHeader('X-Lorem', 'Ipsum');
}));
// Remove a middleware by name
$stack->remove('add_foo');
Mint korábban említettük, a kezelő egy függvény, amely elfogad egy
Psr\Http\Message\RequestInterface
és a kérési opciók tömbjét, és visszaadja a következőt
egy GuzzleHttp\Promise\PromiseInterface
, amely egy GuzzleHttp\Promise\PromiseInterface
Psr\Http\Message\ResponseInterface
vagy egy kivétellel elutasítják.
A kezelő felelős a következő Request Options műveletek alkalmazásáért. Ezek a kérési opciók a kérési opciók egy részhalmaza, az úgynevezett "átviteli opciók".