Sellel leheküljel on kiire sissejuhatus Guzzle'ile ja sissejuhatavad näited. Kui te ei ole veel Guzzle'i paigaldanud, minge Installation lehele.
Guzzle'iga saab päringuid saata, kasutades GuzzleHttp\ClientInterface objekti.
use GuzzleHttp\Client;
$client = new Client([
// Base URI is used with relative requests
'base_uri' => 'http://httpbin.org',
// You can set any number of default request options.
'timeout' => 2.0,
]);
Kliendid on Guzzle'is muutumatud, mis tähendab, et te ei saa muuta kliendi poolt kasutatavaid vaikeväärtusi pärast selle loomist.
Kliendi konstruktor võtab vastu assotsiatiivse massiivi valikuid:
base_uri(string|UriInterface) Kliendi baas-URI, mis liidetakse suhteliseks URIdeks. Võib olla string või UriInterface'i eksemplar. Kui suhteline URI kliendile esitatakse, kombineerib klient baas-URI ja suhtelise URIga, kasutades punktis RFC 3986, lõik 5.2.
// Loo klient baas-URIga.
$client = new GuzzleHttp\Client(['base_uri' => 'https://foo.com/api/']);
// Saada päring aadressile https://foo.com/api/test.
$response = $client->request('GET', 'test');
// Saada päring aadressile https://foo.com/root
$response = $client->request('GET', '/root');
Sa ei taha lugeda RFC 3986? Siin on mõned kiired näited, kuidas base_uri lahendatakse teise URI-ga.
base_uri
URI
Result
http://foo.com
/bar
http://foo.com/bar
http://foo.com/foo
/bar
http://foo.com/bar
http://foo.com/foo
bar
http://foo.com/bar
http://foo.com/foo/
bar
http://foo.com/foo/bar
http://foo.com
http://baz.com
http://baz.com
http://foo.com/?bar
bar
http://foo.com/bar
handlerPsr7\Http\Message\RequestInterface ja massiivi
ülekandevõimalustest ning peab tagastama
GuzzleHttp\Promise\PromiseInterface, mis on täidetud koos
Psr7\Http\Message\ResponseInterface edu korral....Maagilised meetodid kliendil muudavad sünkroonsete päringute saatmise lihtsaks:
$response = $client->get('http://httpbin.org/get');
$response = $client->delete('http://httpbin.org/delete');
$response = $client->head('http://httpbin.org/get');
$response = $client->options('http://httpbin.org/get');
$response = $client->patch('http://httpbin.org/patch');
$response = $client->post('http://httpbin.org/post');
$response = $client->put('http://httpbin.org/put');
Saate luua taotluse ja seejärel saata taotluse koos kliendiga, kui olete valmis:
use GuzzleHttp\Psr7\Request;
$request = new Request('PUT', 'http://httpbin.org/put');
$response = $client->send($request, ['timeout' => 2]);
Kliendi objektid pakuvad suurt paindlikkust selles, kuidas taotlusi on edastatakse, sealhulgas vaikimisi päringu valikud, vaikimisi käitlejate virna vahendustarkvara mida kasutatakse iga taotluse puhul, ning baas-URI, mis võimaldab saata taotlusi suhteliste URIdega.
Lisateavet kliendi vahendustarkvara kohta leiate dokumentatsiooni Handlers and Middleware leheküljelt.
Saate saata asünkroonseid päringuid, kasutades kliendi pakutavaid maagilisi meetodeid:
$promise = $client->getAsync('http://httpbin.org/get');
$promise = $client->deleteAsync('http://httpbin.org/delete');
$promise = $client->headAsync('http://httpbin.org/get');
$promise = $client->optionsAsync('http://httpbin.org/get');
$promise = $client->patchAsync('http://httpbin.org/patch');
$promise = $client->postAsync('http://httpbin.org/post');
$promise = $client->putAsync('http://httpbin.org/put');
Võite kasutada ka kliendi sendAsync() ja requestAsync() meetodeid:
use GuzzleHttp\Psr7\Request;
// Create a PSR-7 request object to send
$headers = ['X-Foo' => 'Bar'];
$body = 'Hello!';
$request = new Request('HEAD', 'http://httpbin.org/head', $headers, $body);
$promise = $client->sendAsync($request);
// Or, if you don't need to pass in a request instance:
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
Nende meetodite tagastatud lubadus rakendab
Promises/A+ spec, mida pakub
Guzzle promises library. See tähendab, et
et saate then() kõnesid lubadusest edasi aheldada. Need then-kutsed on
kas täidetud eduka Psr\Http\Message\ResponseInterface või
lükatakse tagasi erandiga.
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Exception\RequestException;
$promise = $client->requestAsync('GET', 'http://httpbin.org/get');
$promise->then(
function (ResponseInterface $res) {
echo $res->getStatusCode() . "\n";
},
function (RequestException $e) {
echo $e->getMessage() . "\n";
echo $e->getRequest()->getMethod();
}
);
Saate saata mitu päringut samaaegselt, kasutades lubadusi ja asünkroonseid päringuid.
use GuzzleHttp\Client;
use GuzzleHttp\Promise;
$client = new Client(['base_uri' => 'http://httpbin.org/']);
// Initiate each request but do not block
$promises = [
'image' => $client->getAsync('/image'),
'png' => $client->getAsync('/image/png'),
'jpeg' => $client->getAsync('/image/jpeg'),
'webp' => $client->getAsync('/image/webp')
];
// Wait for the requests to complete; throws a ConnectException
// if any of the requests fail
$responses = Promise\Utils::unwrap($promises);
// You can access each response using the key of the promise
echo $responses['image']->getHeader('Content-Length')[0];
echo $responses['png']->getHeader('Content-Length')[0];
// Wait for the requests to complete, even if some of them fail
$responses = Promise\Utils::settle($promises)->wait();
// Values returned above are wrapped in an array with 2 keys: "state" (either fulfilled or rejected) and "value" (contains the response)
echo $responses['image']['state']; // returns "fulfilled"
echo $responses['image']['value']->getHeader('Content-Length')[0];
echo $responses['png']['value']->getHeader('Content-Length')[0];
Võite kasutada GuzzleHttp\Pool objekti, kui teil on määramata hulk päringuid, mida soovite saata.
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Pool;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;
$client = new Client();
$requests = function ($total) {
$uri = 'http://127.0.0.1:8126/guzzle-server/perf';
for ($i = 0; $i < $total; $i++) {
yield new Request('GET', $uri);
}
};
$pool = new Pool($client, $requests(100), [
'concurrency' => 5,
'fulfilled' => function (Response $response, $index) {
// this is delivered each successful response
},
'rejected' => function (RequestException $reason, $index) {
// this is delivered each failed request
},
]);
// Initiate the transfers and create a promise
$promise = $pool->promise();
// Force the pool of requests to complete.
$promise->wait();
Või kasutades sulgemist, mis tagastab lubaduse, kui bassein kutsub sulgemist.
$client = new Client();
$requests = function ($total) use ($client) {
$uri = 'http://127.0.0.1:8126/guzzle-server/perf';
for ($i = 0; $i < $total; $i++) {
yield function() use ($client, $uri) {
return $client->getAsync($uri);
};
}
};
$pool = new Pool($client, $requests(100));
Eelmistes näidetes saime $response muutuja või olime me
saime vastuse lubadusest. Vastuse objekt rakendab PSR-7
response, Psr\Http\Message\ResponseInterface, ja sisaldab palju
kasulikku teavet.
Võite saada vastuse staatuskoodi ja põhjuse fraasi:
$code = $response->getStatusCode(); // 200
$reason = $response->getReasonPhrase(); // OK
Vastusest saab välja võtta päiseid:
// Check if a header exists.
if ($response->hasHeader('Content-Length')) {
echo "It exists";
}
// Get a header from the response.
echo $response->getHeader('Content-Length')[0];
// Get all of the response headers.
foreach ($response->getHeaders() as $name => $values) {
echo $name . ': ' . implode(', ', $values) . "\r\n";
}
Vastuse keha saab kätte meetodiga getBody. Vastuse keha saab kasutada stringina, teisendada stringiks või kasutada voogulaadse objektina.
$body = $response->getBody();
// Implicitly cast the body to a string and echo it
echo $body;
// Explicitly cast the body to a string
$stringBody = (string) $body;
// Read 10 bytes from the body
$tenBytes = $body->read(10);
// Read the remaining contents of the body as a string
$remainingBytes = $body->getContents();
Päringusseadme parameetrid saab esitada päringuga koos päringuga mitmel viisil.
Saate määrata päringustringi parameetrid päringu URI-s:
$response = $client->request('GET', 'http://httpbin.org?foo=bar');
Saate määrata päringustringi parameetrid, kasutades query päringuvõimalust massiivina.
$client->request('GET', 'http://httpbin.org', [
'query' => ['foo' => 'bar']
]);
Valiku esitamine massiivi kujul kasutab päringustringi vormindamiseks PHP http_build_query funktsiooni.
Ja lõpuks saate esitada query päringuvõimaluse stringina.
$client->request('GET', 'http://httpbin.org', ['query' => 'foo=bar']);
Guzzle pakub andmete üleslaadimiseks mitmeid meetodeid.
Saate saata päringuid, mis sisaldavad andmevoolu, edastades stringi,
fopen tagastatud ressurssi või instantsi fopen või instantsi
Psr\Http\Message\StreamInterface body päringuvariandile.
use GuzzleHttp\Psr7;
// Provide the body as a string.
$r = $client->request('POST', 'http://httpbin.org/post', [
'body' => 'raw data'
]);
// Provide an fopen resource.
$body = Psr7\Utils::tryFopen('/path/to/file', 'r');
$r = $client->request('POST', 'http://httpbin.org/post', ['body' => $body]);
// Use the Utils::streamFor method to create a PSR-7 stream.
$body = Psr7\Utils::streamFor('hello!');
$r = $client->request('POST', 'http://httpbin.org/post', ['body' => $body]);
Lihtne viis JSON-andmete üleslaadimiseks ja sobiva päise määramiseks on kasutada json päringuvõimalust:
$r = $client->request('PUT', 'http://httpbin.org/put', [
'json' => ['foo' => 'bar']
]);
Lisaks päringu toorandmete määramisele body abil, pakub Guzzle kasulikke abstraktsioone POST-andmete saatmise kohta.
application/x-www-form-urlencoded POST päringute saatmine nõuab, et te määraksite POST väljad massiivina form_params päringu valikutes.
$response = $client->request('POST', 'http://httpbin.org/post', [
'form_params' => [
'field_name' => 'abc',
'other_field' => '123',
'nested_field' => [
'nested' => 'hello'
]
]
]);
Saate saata faile koos vormiga (multipart/form-data POST päringud),
kasutades multipart päringuvõimalust. multipart võtab vastu massiivi
assotsiatiivseid massiive, kus iga assotsiatiivne massiivi sisaldab järgmisi võtmeid:
Psr\Http\Message\StreamInterface voogedastuseks
sisu PSR-7 voost.use GuzzleHttp\Psr7;
$response = $client->request('POST', 'http://httpbin.org/post', [
'multipart' => [
[
'name' => 'field_name',
'contents' => 'abc'
],
[
'name' => 'file_name',
'contents' => Psr7\Utils::tryFopen('/path/to/file', 'r')
],
[
'name' => 'other_file',
'contents' => 'hello',
'filename' => 'filename.txt',
'headers' => [
'X-Foo' => 'this is an extra header to include'
]
]
]
]);
Guzzle võib säilitada teie jaoks küpsiste sessiooni, kui kasutate selleks juhiseid, kasutades funktsiooni
cookies taotlusvalikut. Päringu saatmisel saab cookies valikuga cookies
peab olema seatud GuzzleHttp\Cookie\CookieJarInterface eksemplariks.
// Use a specific cookie jar
$jar = new \GuzzleHttp\Cookie\CookieJar;
$r = $client->request('GET', 'http://httpbin.org/cookies', [
'cookies' => $jar
]);
Saate cookies määrata true kliendi konstruktoris, kui soovite kasutada kõigi päringute jaoks ühist küpsiste purki.
// Use a shared client cookie jar
$client = new \GuzzleHttp\Client(['cookies' => true]);
$r = $client->request('GET', 'http://httpbin.org/cookies');
GuzzleHttp\Cookie\CookieJarInterface jaoks on olemas erinevad implementatsioonid:
GuzzleHttp\Cookie\CookieJar salvestab küpsiseid massiivi kujul.GuzzleHttp\Cookie\FileCookieJar klass säilitab mitte-sessiooniküpsised.
kasutades JSON-formaadis faili.GuzzleHttp\Cookie\SessionCookieJar klass säilitab küpsised dokumendis.
kliendi sessioonis.Küpsiseid saab käsitsi küpsiste purki panna nimega konstruktoriga fromArray(array $cookies, $domain).
$jar = \GuzzleHttp\Cookie\CookieJar::fromArray(
[
'some_cookie' => 'foo',
'other_cookie' => 'barbaz1234'
],
'example.org'
);
Küpsise saab kätte selle nime järgi meetodiga getCookieByName($name), mis tagastab GuzzleHttp\Cookie\SetCookie instantsi.
$cookie = $jar->getCookieByName('some_cookie');
$cookie->getValue(); // 'foo'
$cookie->getDomain(); // 'example.org'
$cookie->getExpires(); // expiration date as a Unix timestamp
Küpsiseid saab ka massiivina kätte tänu meetodile toArray().
GuzzleHttp\Cookie\CookieJarInterface liides laiendab GuzzleHttp\Cookie\CookieJarInterface liidest.
Traversable, nii et seda saab korrata foreach-tsüklis.
Guzzle järgib automaatselt ümbersuunamisi, kui te ei ütle talle, et ta seda ei tee. Te saate kohandada ümbersuunamise käitumist, kasutades allow_redirects taotluse valikut.
true, et võimaldada tavalisi ümbersuunamisi, mille maksimaalne arv on 5.
ümbersuunamised. See on vaikimisi seade.false, et keelata ümbersuunamised.$response = $client->request('GET', 'http://github.com');
echo $response->getStatusCode();
// 200
Järgmine näide näitab, et ümbersuunamisi saab keelata.
$response = $client->request('GET', 'http://github.com', [
'allow_redirects' => false
]);
echo $response->getStatusCode();
// 301
Tree View
Järgmine puuvaade kirjeldab, kuidas Guzzle'i erandid üksteisest sõltuvad.
. \RuntimeException
└── TransferException (implements GuzzleException)
├── ConnectException (implements NetworkExceptionInterface)
└── RequestException
├── BadResponseException
│ ├── ServerException
│ └── ClientException
└── TooManyRedirectsException
Guzzle viskab ülekande ajal tekkivate vigade korral erandeid.
Erand GuzzleHttp\Exception\ConnectException on visatud erandis
võrguühenduse vea korral. See erand laieneb
GuzzleHttp\Exception\TransferException.
A GuzzleHttp\Exception\ClientException is thrown for 400
taseme vead, kui http_errors taotluse valikuks on seatud true. See
erand laieneb GuzzleHttp\Exception\BadResponseException ja GuzzleHttp\Exception\BadResponseException ja
GuzzleHttp\Exception\BadResponseException laieneb aastast
GuzzleHttp\Exception\RequestException.
use GuzzleHttp\Psr7;
use GuzzleHttp\Exception\ClientException;
try {
$client->request('GET', 'https://github.com/_abc_123_404');
} catch (ClientException $e) {
echo Psr7\Message::toString($e->getRequest());
echo Psr7\Message::toString($e->getResponse());
}
GuzzleHttp\Exception\ServerException visatakse 500 taseme korral.
vead, kui http_errors taotluse valikuks on seatud true. See
erand laieneb GuzzleHttp\Exception\BadResponseException
GuzzleHttp\Exception\TooManyRedirectsException visatakse siis, kui liiga palju
palju ümbersuunamisi järgitakse. See erand laieneb GuzzleHttp\Exception\RequestException
Kõik ülaltoodud erandid tulenevad GuzzleHttp\Exception\TransferException.
Guzzle avaldab mõned keskkonnamuutujad, mida saab kasutada raamatukogu käitumise kohandamiseks.
GUZZLE_CURL_SELECT_TIMEOUTcurl_multi_select(). Mõned süsteemid
on probleeme PHP rakendusega curl_multi_select(), kus
selle funktsiooni kutsumine toob alati kaasa ootamise maksimaalse kestusega
timeouti.HTTP_PROXYMääratleb proxy, mida kasutatakse päringute saatmisel http-protokolli kasutades.
Märkus: kuna muutuja HTTP_PROXY võib mõnes (CGI) keskkonnas sisaldada suvalist kasutaja sisendit, kasutatakse seda muutujat ainult CLI SAPI-s. Lisateavet vt https://httpoxy.org.
HTTPS_PROXYNO_PROXYGuzzle saab klientide konfigureerimisel kasutada PHP ini seadeid.
openssl.cafile