Ei. Guzzle voi käyttää mitä tahansa HTTP-käsittelijää pyyntöjen lähettämiseen. Tämä tarkoittaa, että Guzzle voidaan käyttää cURL:n, PHP:n stream-kääreen, socketien ja lukkiutumattomien kirjastojen kanssa. kuten React. Sinun täytyy vain määrittää HTTP-käsittelijä. käyttämään eri menetelmää pyyntöjen lähettämiseen.
Huomautus
Guzzle on perinteisesti käyttänyt vain cURL:ää HTTP-pyyntöjen lähettämiseen. cURL on hämmästyttävä HTTP-asiakasohjelma (kiistatta paras), ja Guzzle käyttää jatkossakin cURL:ää. sitä oletusarvoisesti, kun se on saatavilla. Se on harvinaista, mutta jotkut kehittäjät eivät ole ole asentanut cURL:ää järjestelmiinsä tai törmäävät versiokohtaisiin ongelmiin. Sallimalla vaihdettavat HTTP-käsittelijät Guzzle on nyt paljon paremmin muokattavissa. ja pystyy mukautumaan useampien kehittäjien tarpeisiin.
Kyllä. Voit käyttää requestAsync
, sendAsync
, getAsync
,
headAsync
, putAsync
, postAsync
, deleteAsync
ja patchAsync
.
metodeja, joilla asiakas lähettää asynkronisen pyynnön. Asiakas palauttaa
GuzzleHttp\Promise\PromiseInterface
-olion. Voit ketjuttaa then
funktioita lupauksesta.
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
$promise->then(function ($response) {
echo 'Got a response! ' . $response->getStatusCode();
});
Voit pakottaa asynkronisen vastauksen loppuun käyttämällä palautetun lupauksen wait()
metodia.
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
$response = $promise->wait();
cURL tarjoaa valtavan määrän muokattavia vaihtoehtoja. Vaikka Guzzle normalisoi monet näistä vaihtoehdoista eri käsittelijöiden välillä, on olemassa on tilanteita, joissa sinun on asetettava mukautettuja cURL-asetuksia. Tämä voidaan tehdä välittämällä assosiatiivinen joukko cURL-asetuksia curl-avaimessa a request.
Oletetaan esimerkiksi, että sinun on mukautettava asiakkaan kanssa käytettävää lähtevää verkkoliitäntää.
$client->request('GET', '/', [
'curl' => [
CURLOPT_INTERFACE => 'xxx.xxx.xxx.xxx'
]
]);
Jos käytät asynkronisia pyyntöjä cURL-monikäsittelijän kanssa ja haluat säätää sitä,
lisäasetukset voidaan määritellä assosiatiivisena joukkona attribuutissa
options -avaimeen CurlMultiHandler
-konstruktorissa.
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlMultiHandler;
$client = new Client(['handler' => HandlerStack::create(new CurlMultiHandler([
'options' => [
CURLMOPT_MAX_TOTAL_CONNECTIONS => 50,
CURLMOPT_MAX_HOST_CONNECTIONS => 5,
]
]))]);
Voit välittää mukautettuja virtauskontekstin asetuksia käyttämällä pyyntövaihtoehdon stream_context-avainta. stream_context array on assosiatiivinen array, jossa jokainen avain on PHP-siirto ja jokainen arvo on on assosiatiivinen joukko kuljetusvaihtoehtoja.
Oletetaan esimerkiksi, että sinun on mukautettava asiakkaan kanssa käytettävää lähtevää verkkoliitäntää ja sallittava itse allekirjoitetut varmenteet.
$client->request('GET', '/', [
'stream' => true,
'stream_context' => [
'ssl' => [
'allow_self_signed' => true
],
'socket' => [
'bindto' => 'xxx.xxx.xxx.xxx'
]
]
]);
Sinun on määritettävä levyllä oleva polku CA-pakettiin, jota Guzzle käyttää vertaisvarmenteen tarkistamiseen. Katso verify.
Maximum function nesting level of '100' reached, aborting
Saatat törmätä tähän virheeseen, jos sinulla on asennettuna XDebug-laajennus ja suoritat paljon pyyntöjä takaisinkutsuissa. Tämä virheilmoitus tulee erityisesti XDebug-laajennuksesta. PHP:llä itsellään ei ole funktiota sisäkkäisrajoitusta. Muuta tätä asetusta php.ini:ssäsi lisätäksesi rajaa:
xdebug.max_nesting_level = 1000
Tämä voi johtua monista syistä, mutta jos lähetät PUT-, POST- tai
PATCH-pyyntöjä, joissa on Expect: 100-Continue
-otsikko, palvelin, joka ei ole
ei tue tätä otsikkoa, palauttaa vastauksen 417. Tämän voi kiertää seuraavasti
asettamalla expect
-pyyntövaihtoehdon arvoksi false
:
$client = new GuzzleHttp\Client();
// Disable the expect header on a single request
$response = $client->request('PUT', '/', ['expect' => false]);
// Disable the expect header on all client requests
$client = new GuzzleHttp\Client(['expect' => false]);
Voit ottaa uudelleenohjattujen URI:iden ja tilakoodien seurannan käyttöön komennolla
track_redirects -vaihtoehdon avulla. Jokainen uudelleenohjattu URI ja tilakoodi tallennetaan tiedostoon
X-Guzzle-Redirect-History
ja X-Guzzle-Redirect-Status-History
.
otsikon mukaisesti.
Alkuperäisen pyynnön URI ja lopullinen tilakoodi jätetään tulosten ulkopuolelle. Näin ollen sinun pitäisi pystyä helposti seuraamaan pyynnön koko uudelleenohjauspolkua.
Sanotaan esimerkiksi, että sinun on seurattava uudelleenohjauksia ja annettava molemmat tulokset yhdessä raportissa:
// First you configure Guzzle with redirect tracking and make a request
$client = new Client([
RequestOptions::ALLOW_REDIRECTS => [
'max' => 10, // allow at most 10 redirects.
'strict' => true, // use "strict" RFC compliant redirects.
'referer' => true, // add a Referer header
'track_redirects' => true,
],
]);
$initialRequest = '/redirect/3'; // Store the request URI for later use
$response = $client->request('GET', $initialRequest); // Make your request
// Retrieve both Redirect History headers
$redirectUriHistory = $response->getHeader('X-Guzzle-Redirect-History')[0]; // retrieve Redirect URI history
$redirectCodeHistory = $response->getHeader('X-Guzzle-Redirect-Status-History')[0]; // retrieve Redirect HTTP Status history
// Add the initial URI requested to the (beginning of) URI history
array_unshift($redirectUriHistory, $initialRequest);
// Add the final HTTP status code to the end of HTTP response history
array_push($redirectCodeHistory, $response->getStatusCode());
// (Optional) Combine the items of each array into a single result set
$fullRedirectReport = [];
foreach ($redirectUriHistory as $key => $value) {
$fullRedirectReport[$key] = ['location' => $value, 'code' => $redirectCodeHistory[$key]];
}
echo json_encode($fullRedirectReport);