Μπορείτε να προσαρμόσετε τις αιτήσεις που δημιουργούνται και μεταφέρονται από έναν πελάτη χρησιμοποιώντας request options. Οι επιλογές αίτησης ελέγχουν διάφορες πτυχές μιας αίτησης συμπεριλαμβανομένων, των κεφαλίδων, των παραμέτρων της συμβολοσειράς ερωτήματος, των ρυθμίσεων χρονικού ορίου, του σώματος ενός αίτησης και πολλά άλλα.
Όλα τα παρακάτω παραδείγματα χρησιμοποιούν τον ακόλουθο πελάτη:
$client = new GuzzleHttp\Client(['base_uri' => 'http://httpbin.org']);
Περιγράφει τη συμπεριφορά ανακατεύθυνσης μιας αίτησης
[
'max' => 5,
'strict' => false,
'referer' => false,
'protocols' => ['http', 'https'],
'track_redirects' => false
]
GuzzleHttp\RequestOptions::ALLOW_REDIRECTS
Ορίστε την τιμή false
για να απενεργοποιήσετε τις ανακατευθύνσεις.
$res = $client->request('GET', '/redirect/3', ['allow_redirects' => false]);
echo $res->getStatusCode();
// 302
Ορίστε την τιμή true
(η προεπιλεγμένη ρύθμιση) για να ενεργοποιήσετε τις κανονικές ανακατευθύνσεις με μέγιστο αριθμό 5 ανακατευθύνσεων.
$res = $client->request('GET', '/redirect/3');
echo $res->getStatusCode();
// 200
Μπορείτε επίσης να περάσετε έναν συσχετιστικό πίνακα που περιέχει τα ακόλουθα ζεύγη τιμών κλειδιών:
max: (int, default=5) μέγιστος αριθμός επιτρεπόμενων ανακατευθύνσεων.
strict: (bool, default=false) Ορίστε την τιμή true για να χρησιμοποιήσετε αυστηρές ανακατευθύνσεις. Οι αυστηρές ανακατευθύνσεις σύμφωνα με το RFC σημαίνουν ότι τα αιτήματα ανακατεύθυνσης POST αποστέλλονται ως POST αιτήματα έναντι αυτού που κάνουν οι περισσότεροι φυλλομετρητές, δηλαδή ανακατευθύνουν τα αιτήματα POST με αιτήματα GET
referer: (bool, default=false) Ορίστε την τιμή true για να ενεργοποιήσετε την προσθήκη του Referer επικεφαλίδας κατά την ανακατεύθυνση
πρωτόκολλα: (array, default=['http', 'https']) Καθορίζεται ποια πρωτόκολλα είναι επιτρέπονται για αιτήσεις ανακατεύθυνσης
on_redirect: (callable) PHP callable που καλείται όταν γίνεται ανακατεύθυνση συναντάται. Η callable καλείται με το αρχικό αίτημα και το απάντηση ανακατεύθυνσης που ελήφθη. Οποιαδήποτε τιμή επιστροφής από την on_redirect αγνοείται.
track_redirects: true
, κάθε URI ανακατεύθυνσης και status
κωδικός που συναντάται θα παρακολουθείται στο X-Guzzle-Redirect-History
και
X-Guzzle-Redirect-Status-History
αντίστοιχα. Όλα τα URIs και
κωδικοί κατάστασης θα αποθηκεύονται με τη σειρά με την οποία εμφανίστηκαν οι ανακατευθύνσεις
Σημείωση: Κατά την παρακολούθηση των ανακατευθύνσεων η επικεφαλίδα X-Guzzle-Redirect-History
θα
αποκλείει το URI της αρχικής αίτησης και την X-Guzzle-Redirect-Status-History
κεφαλίδα θα αποκλείσει τον τελικό κωδικό κατάστασης
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\UriInterface;
$onRedirect = function(
RequestInterface $request,
ResponseInterface $response,
UriInterface $uri
) {
echo 'Redirecting! ' . $request->getUri() . ' to ' . $uri . "\n";
};
$res = $client->request('GET', '/redirect/3', [
'allow_redirects' => [
'max' => 10, // allow at most 10 redirects.
'strict' => true, // use "strict" RFC compliant redirects.
'referer' => true, // add a Referer header
'protocols' => ['https'], // only allow https URLs
'on_redirect' => $onRedirect,
'track_redirects' => true
]
]);
echo $res->getStatusCode();
// 200
echo $res->getHeaderLine('X-Guzzle-Redirect-History');
// http://first-redirect, http://second-redirect, etc...
echo $res->getHeaderLine('X-Guzzle-Redirect-Status-History');
// 301, 302, etc...
Προειδοποίηση
Αυτή η επιλογή έχει αποτέλεσμα μόνο αν ο χειριστής σας έχει την επιλογή
GuzzleHttp\Middleware::redirect
middleware. Αυτό το middleware προστίθεται
από προεπιλογή όταν δημιουργείται ένας πελάτης χωρίς χειριστή, και προστίθεται από το
όταν δημιουργείται ένας χειριστής με GuzzleHttp\HandlerStack::create
.
Σημείωση
Αυτή η επιλογή δεν έχει καμία επίδραση όταν κάνετε αιτήσεις χρησιμοποιώντας GuzzleHttp\Client::sendRequest()
. Προκειμένου να παραμείνει συμβατή με το PSR-18, οποιαδήποτε απάντηση ανακατεύθυνσης επιστρέφεται ως έχει.
Περάστε έναν πίνακα παραμέτρων ελέγχου ταυτότητας HTTP για χρήση με την εντολή
request. Ο πίνακας πρέπει να περιέχει το όνομα χρήστη στον δείκτη [0], τον κωδικό πρόσβασης στον δείκτη
index [1], και μπορείτε προαιρετικά να παρέχετε έναν ενσωματωμένο τύπο ελέγχου ταυτότητας στο
index [2]. Περάστε null
για να απενεργοποιήσετε τον έλεγχο ταυτότητας για μια αίτηση
Κανένα
GuzzleHttp\RequestOptions::AUTH
Οι ενσωματωμένοι τύποι ελέγχου ταυτότητας είναι οι εξής:
Authorization
(η προεπιλεγμένη ρύθμιση που χρησιμοποιείται αν δεν υπάρχει
καθοριστεί).$client->request('GET', '/get', ['auth' => ['username', 'password']]);
$client->request('GET', '/get', [
'auth' => ['username', 'password', 'digest']
]);
Σημείωση
Αυτό υποστηρίζεται προς το παρόν μόνο όταν χρησιμοποιείται ο χειριστής cURL, αλλά η δημιουργία μιας αντικατάστασης που μπορεί να χρησιμοποιηθεί με οποιονδήποτε χειριστή HTTP είναι προγραμματιστεί.
$client->request('GET', '/get', [
'auth' => ['username', 'password', 'ntlm']
]);
Σημείωση
Αυτό υποστηρίζεται προς το παρόν μόνο όταν χρησιμοποιείται ο χειριστής cURL.
Η επιλογή body
χρησιμοποιείται για τον έλεγχο του σώματος μιας οντότητας.
που περικλείει την αίτηση (π.χ. PUT, POST, PATCH)
fopen()
resourcePsr\Http\Message\StreamInterface
Κανένα
GuzzleHttp\RequestOptions::BODY
Αυτή η ρύθμιση μπορεί να οριστεί σε οποιονδήποτε από τους ακόλουθους τύπους:
string
// Μπορείτε να στείλετε αιτήσεις που χρησιμοποιούν μια συμβολοσειρά ως σώμα μηνύματος.
$client->request('PUT', '/put', ['body' => 'foo']),
πόρος που επιστρέφεται από fopen()
// Μπορείτε να στείλετε αιτήσεις που χρησιμοποιούν έναν πόρο ροής ως σώμα.
$resource = \GuzzleHttp\Psr7\Utils::tryFopen('http://httpbin.org', 'r'),
$client->request('PUT', '/put', ['body' => $resource]),
Psr\Http\Message\StreamInterface
// Μπορείτε να στείλετε αιτήσεις που χρησιμοποιούν ένα αντικείμενο ροής Guzzle ως σώμα
$stream = GuzzleHttp\Psr7\Utils::streamFor('contents...'),
$client->request('POST', '/post', ['body' => $stream]),
Σημείωση
Αυτή η επιλογή δεν μπορεί να χρησιμοποιηθεί με form_params
, multipart
, ή json
Ορίζεται σε μια συμβολοσειρά για να καθορίσετε τη διαδρομή προς ένα αρχείο που περιέχει ένα PEM μορφοποιημένο πιστοποιητικό πελάτη. Εάν απαιτείται κωδικός πρόσβασης, τότε ορίστε το έναν πίνακα που περιέχει τη διαδρομή προς το αρχείο PEM στο πρώτο στοιχείο του πίνακα ακολουθούμενο από τον κωδικό πρόσβασης που απαιτείται για το πιστοποιητικό στο δεύτερο στοιχείο πίνακα στοιχείο.
Κανένα
GuzzleHttp\RequestOptions::CERT
$client->request('GET', '/', ['cert' => ['/path/server.pem', 'password']]);
GuzzleHttp\Cookie\CookieJarInterface
GuzzleHttp\RequestOptions::COOKIES
Πρέπει να καθορίσετε την επιλογή cookies ως GuzzleHttp\Cookie\CookieJarInterface
ή false
.
$jar = new \GuzzleHttp\Cookie\CookieJar();
$client->request('GET', '/get', ['cookies' => $jar]);
Προειδοποίηση
Αυτή η επιλογή έχει αποτέλεσμα μόνο αν ο χειριστής σας έχει την επιλογή
GuzzleHttp\Middleware::cookies
middleware. Αυτό το middleware προστίθεται
από προεπιλογή όταν δημιουργείται ένας πελάτης χωρίς χειριστή, και προστίθεται από το
όταν δημιουργείται ένας χειριστής με GuzzleHttp\default_handler
.
Συμβουλή
Κατά τη δημιουργία ενός πελάτη, μπορείτε να ορίσετε την προεπιλεγμένη επιλογή cookie σε true
για να χρησιμοποιήσετε μια κοινή συνεδρία cookie που σχετίζεται με τον πελάτη.
0
για να περιμένετε επ' αόριστον (η προεπιλεγμένη συμπεριφορά).0
GuzzleHttp\RequestOptions::CONNECT_TIMEOUT
// Timeout if the client fails to connect to the server in 3.14 seconds.
$client->request('GET', '/delay/5', ['connect_timeout' => 3.14]);
Σημείωση
Αυτή η ρύθμιση πρέπει να υποστηρίζεται από τον χειριστή HTTP που χρησιμοποιείται για την αποστολή μιας αίτησης.
connect_timeout
υποστηρίζεται προς το παρόν μόνο από τον ενσωματωμένο cURL
handler.
Ορίζεται σε true
ή ορίζεται σε μια ροή PHP που επιστρέφεται από την fopen()
για να
να ενεργοποιήσετε την έξοδο αποσφαλμάτωσης με τον χειριστή που χρησιμοποιείται για την αποστολή μιας αίτησης. Για παράδειγμα,
όταν χρησιμοποιείται η cURL για τη μεταφορά αιτήσεων, το verbose της cURL της CURLOPT_VERBOSE
θα εκπέμπεται. Όταν χρησιμοποιείτε το περιτύλιγμα ροής της PHP, το περιτύλιγμα ροής
θα εκπέμπονται ειδοποιήσεις. Εάν οριστεί σε true, η έξοδος γράφεται στο
STDOUT της PHP. Εάν παρέχεται μια ροή PHP, η έξοδος γράφεται στη ροή
fopen()
resourceΚανένα
GuzzleHttp\RequestOptions::DEBUG
$client->request('GET', '/get', ['debug' => true]);
Η εκτέλεση του παραπάνω παραδείγματος θα έβγαζε κάτι σαν το ακόλουθο:
* About to connect() to httpbin.org port 80 (#0)
* Trying 107.21.213.98... * Connected to httpbin.org (107.21.213.98) port 80 (#0)
> GET /get HTTP/1.1
Host: httpbin.org
User-Agent: Guzzle/4.0 curl/7.21.4 PHP/5.5.7
< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< Content-Type: application/json
< Date: Sun, 16 Feb 2014 06:50:09 GMT
< Server: gunicorn/0.17.4
< Content-Length: 335
< Connection: keep-alive
<
* Connection #0 to host httpbin.org left intact
Καθορίστε εάν οι Content-Encoding
απαντήσεις (gzip,
deflate κ.λπ.) αποκωδικοποιούνται αυτόματα
true
GuzzleHttp\RequestOptions::DECODE_CONTENT
Αυτή η επιλογή μπορεί να χρησιμοποιηθεί για τον έλεγχο του τρόπου με τον οποίο τα κωδικοποιημένα σώματα απόκρισης περιεχομένου
χειρίζεται. Από προεπιλογή, decode_content
έχει οριστεί σε true, που σημαίνει ότι κάθε gzipped
ή deflated απάντηση θα αποκωδικοποιηθεί από το Guzzle.
Όταν έχει οριστεί σε false
, το σώμα μιας απάντησης δεν αποκωδικοποιείται ποτέ, πράγμα που σημαίνει ότι τα bytes περνούν από τον χειριστή αναλλοίωτα.
// Request gzipped data, but do not decode it while downloading
$client->request('GET', '/foo.js', [
'headers' => ['Accept-Encoding' => 'gzip'],
'decode_content' => false
]);
Όταν ορίζεται σε συμβολοσειρά, τα bytes μιας απάντησης αποκωδικοποιούνται και η τιμή της συμβολοσειράς
που παρέχεται στην επιλογή decode_content
περνάει ως Accept-Encoding
κεφαλίδα της αίτησης.
// Pass "gzip" as the Accept-Encoding header.
$client->request('GET', '/foo.js', ['decode_content' => 'gzip']);
Ο αριθμός των χιλιοστών του δευτερολέπτου για την καθυστέρηση πριν από την αποστολή της αίτησης
null
GuzzleHttp\RequestOptions::DELAY
Ελέγχει τη συμπεριφορά της επικεφαλίδας "Expect: 100-Continue".
1048576
GuzzleHttp\RequestOptions::EXPECT
Ορίστε την τιμή true
για να ενεργοποιήσετε την επικεφαλίδα "Expect: 100-Continue" για όλες τις αιτήσεις.
που στέλνουν ένα σώμα. Ορίστε την τιμή false
για να απενεργοποιήσετε την "Expect: 100-Continue"
για όλες τις αιτήσεις. Ορίζεται σε έναν αριθμό, έτσι ώστε το μέγεθος του ωφέλιμου φορτίου να πρέπει να
να είναι μεγαλύτερο από τον αριθμό προκειμένου να σταλεί η επικεφαλίδα Expect. Ορισμός σε a
αριθμό θα στείλει την επικεφαλίδα Expect για όλες τις αιτήσεις στις οποίες το μέγεθος του
ωφέλιμου φορτίου δεν μπορεί να προσδιοριστεί ή όπου το σώμα δεν μπορεί να αναδιπλωθεί.
Από προεπιλογή, το Guzzle θα προσθέσει την επικεφαλίδα "Expect: 100-Continue" όταν το μέγεθος του σώματος μιας αίτησης είναι μεγαλύτερο από 1 MB και μια αίτηση χρησιμοποιεί HTTP/1.1.
Σημείωση
Αυτή η επιλογή ισχύει μόνο όταν χρησιμοποιείτε HTTP/1.1. Οι επιλογές HTTP/1.0 και HTTP/2.0 δεν υποστηρίζουν την επικεφαλίδα "Expect: 100-Continue". Η υποστήριξη για το χειρισμό της ροής εργασίας "Expect: 100-Continue" πρέπει να είναι υλοποιηθεί από τους χειριστές HTTP του Guzzle που χρησιμοποιούνται από έναν πελάτη.
GuzzleHttp\RequestOptions::FORCE_IP_RESOLVE
// Force ipv4 protocol
$client->request('GET', '/foo', ['force_ip_resolve' => 'v4']);
// Force ipv6 protocol
$client->request('GET', '/foo', ['force_ip_resolve' => 'v6']);
Σημείωση
Αυτή η ρύθμιση πρέπει να υποστηρίζεται από τον χειριστή HTTP που χρησιμοποιείται για την αποστολή μιας αίτησης.
force_ip_resolve
υποστηρίζεται προς το παρόν μόνο από τον ενσωματωμένο cURL
και τους χειριστές ροής.
GuzzleHttp\RequestOptions::FORM_PARAMS
Συναρτησιακός πίνακας ονομάτων πεδίων φόρμας σε τιμές όπου κάθε τιμή είναι μια συμβολοσειρά ή πίνακας συμβολοσειρών. Ορίζει την επικεφαλίδα Content-Type σε application/x-www-form-urlencoded όταν δεν υπάρχει ήδη επικεφαλίδα Content-Type παρούσα.
$client->request('POST', '/post', [
'form_params' => [
'foo' => 'bar',
'baz' => ['hi', 'there!']
]
]);
Σημείωση
Το form_params
δεν μπορεί να χρησιμοποιηθεί με την επιλογή multipart
. Θα πρέπει να χρησιμοποιήσετε την επιλογή
μία από τις δύο επιλογές. Χρησιμοποιήστε form_params
για application/x-www-form-urlencoded
αιτήσεις, και multipart
για multipart/form-data
αιτήσεις.
Αυτή η επιλογή δεν μπορεί να χρησιμοποιηθεί με body
, multipart
, ή json
GuzzleHttp\RequestOptions::HEADERS
// Set various headers on a request
$client->request('GET', '/get', [
'headers' => [
'User-Agent' => 'testing/1.0',
'Accept' => 'application/json',
'X-Foo' => ['Bar', 'Baz']
]
]);
Οι επικεφαλίδες μπορούν να προστεθούν ως προεπιλεγμένες επιλογές κατά τη δημιουργία ενός πελάτη. Όταν οι επικεφαλίδες
χρησιμοποιούνται ως προεπιλεγμένες επιλογές, εφαρμόζονται μόνο εάν η αίτηση που δημιουργείται
δεν περιέχει ήδη τη συγκεκριμένη επικεφαλίδα. Αυτό περιλαμβάνει τόσο τις αιτήσεις που περνούν
στον πελάτη στις μεθόδους send()
και sendAsync()
, όσο και οι αιτήσεις
που δημιουργούνται από τον πελάτη (π.χ. request()
και requestAsync()
).
$client = new GuzzleHttp\Client(['headers' => ['X-Foo' => 'Bar']]);
// Will send a request with the X-Foo header.
$client->request('GET', '/get');
// Sets the X-Foo header to "test", which prevents the default header
// from being applied.
$client->request('GET', '/get', ['headers' => ['X-Foo' => 'test']]);
// Will disable adding in default headers.
$client->request('GET', '/get', ['headers' => null]);
// Will not overwrite the X-Foo header because it is in the message.
use GuzzleHttp\Psr7\Request;
$request = new Request('GET', 'http://foo.com', ['X-Foo' => 'test']);
$client->send($request);
// Will overwrite the X-Foo header with the request option provided in the
// send method.
use GuzzleHttp\Psr7\Request;
$request = new Request('GET', 'http://foo.com', ['X-Foo' => 'test']);
$client->send($request, ['headers' => ['X-Foo' => 'overwrite']]);
false
για να απενεργοποιήσετε τη δημιουργία εξαιρέσεων σε ένα πρωτόκολλο HTTP.
σφάλματα (δηλαδή, απαντήσεις 4xx και 5xx). Οι εξαιρέσεις απορρίπτονται από προεπιλογή όταν
παρουσιάζονται σφάλματα πρωτοκόλλου HTTP.true
GuzzleHttp\RequestOptions::HTTP_ERRORS
$client->request('GET', '/status/500');
// Throws a GuzzleHttp\Exception\ServerException
$res = $client->request('GET', '/status/500', ['http_errors' => false]);
echo $res->getStatusCode();
// 500
Προειδοποίηση
Αυτή η επιλογή έχει αποτέλεσμα μόνο αν ο χειριστής σας έχει την επιλογή
GuzzleHttp\Middleware::httpErrors
middleware. Αυτό το middleware προστίθεται
από προεπιλογή όταν δημιουργείται ένας πελάτης χωρίς χειριστή, και προστίθεται από το
όταν δημιουργείται ένας χειριστής με GuzzleHttp\default_handler
.
Υποστήριξη διεθνοποιημένων ονομάτων τομέα (IDN) (ενεργοποιημένη από προεπιλογή εάν
intl
η επέκταση είναι διαθέσιμη)
true
if intl
extension is available (and ICU library is 4.6+ for PHP 7.2+), false
otherwise
GuzzleHttp\RequestOptions::IDN_CONVERSION
$client->request('GET', 'https://яндекс.рф');
// яндекс.рф is translated to xn--d1acpjx3f.xn--p1ai before passing it to the handler
$res = $client->request('GET', 'https://яндекс.рф', ['idn_conversion' => false]);
// The domain part (яндекс.рф) stays unmodified
Ενεργοποιεί/απενεργοποιεί την υποστήριξη IDN, μπορεί επίσης να χρησιμοποιηθεί για ακριβή έλεγχο συνδυάζοντας
σταθερές IDNA_* (εκτός από IDNA_ERROR_*), βλ. παράμετρο $options
στην ενότητα
idn_to_ascii()
τεκμηρίωση για περισσότερες λεπτομέρειες.
json
χρησιμοποιείται για την εύκολη μεταφόρτωση δεδομένων κωδικοποιημένων σε JSON, όπως το
σώμα μιας αίτησης. Μια επικεφαλίδα Content-Type της application/json
θα είναι
προστεθεί εάν δεν υπάρχει ήδη επικεφαλίδα Content-Type στο μήνυμα.json_encode() της PHP
.GuzzleHttp\RequestOptions::JSON
$response = $client->request('PUT', '/put', ['json' => ['foo' => 'bar']]);
Ακολουθεί ένα παράδειγμα χρήσης του tap
middleware για να δείτε ποια αίτηση αποστέλλεται μέσω του καλωδίου.
use GuzzleHttp\Middleware;
// Create a middleware that echoes parts of the request.
$tapMiddleware = Middleware::tap(function ($request) {
echo $request->getHeaderLine('Content-Type');
// application/json
echo $request->getBody();
// {"foo":"bar"}
});
// The $handler variable is the handler passed in the
// options to the client constructor.
$response = $client->request('PUT', '/put', [
'json' => ['foo' => 'bar'],
'handler' => $tapMiddleware($handler)
]);
Σημείωση
Αυτή η επιλογή αίτησης δεν υποστηρίζει την προσαρμογή της επικεφαλίδας Content-Type
ή οποιαδήποτε από τις επιλογές από την json_encode() της PHP
function. Αν πρέπει να προσαρμόσετε αυτές τις ρυθμίσεις, τότε πρέπει να περάσετε την εντολή
JSON κωδικοποιημένα δεδομένα στην αίτηση εσείς οι ίδιοι χρησιμοποιώντας την body
αίτηση
και πρέπει να καθορίσετε τη σωστή κεφαλίδα Content-Type χρησιμοποιώντας την επιλογή
headers
επιλογή αίτησης.
Αυτή η επιλογή δεν μπορεί να χρησιμοποιηθεί με body
, form_params
, ή multipart
GuzzleHttp\RequestOptions::MULTIPART
Η τιμή του multipart
είναι ένας πίνακας συσχετιστικών πινάκων, καθένας από τους οποίους περιέχει τα ακόλουθα ζεύγη τιμών κλειδιών:
name
: (string, υποχρεωτικό) το όνομα του πεδίου της φόρμαςcontents
: (StreamInterface/resource/string, απαιτείται) Τα δεδομένα που θα χρησιμοποιηθούν στο
το στοιχείο της φόρμας.headers
: (array) Προαιρετικός συσχετιστικός πίνακας προσαρμοσμένων επικεφαλίδων για χρήση με το
το στοιχείο της φόρμας.filename
: (string) Προαιρετική συμβολοσειρά που αποστέλλεται ως όνομα αρχείου στο τμήμα.use GuzzleHttp\Psr7;
$client->request('POST', '/post', [
'multipart' => [
[
'name' => 'foo',
'contents' => 'data',
'headers' => ['X-Baz' => 'bar']
],
[
'name' => 'baz',
'contents' => Psr7\Utils::tryFopen('/path/to/file', 'r')
],
[
'name' => 'qux',
'contents' => Psr7\Utils::tryFopen('/path/to/file', 'r'),
'filename' => 'custom_filename.txt'
],
]
]);
Σημείωση
Το multipart
δεν μπορεί να χρησιμοποιηθεί με την επιλογή form_params
. Θα πρέπει να
να χρησιμοποιήσετε τη μία ή την άλλη. Χρησιμοποιήστε form_params
για application/x-www-form-urlencoded
αιτήσεις, και multipart
για multipart/form-data
αιτήσεις.
Αυτή η επιλογή δεν μπορεί να χρησιμοποιηθεί με body
, form_params
, ή json
Ένα callable που καλείται όταν οι επικεφαλίδες HTTP της απόκρισης έχουν ληφθεί, αλλά το σώμα δεν έχει ακόμη αρχίσει να κατεβαίνει
GuzzleHttp\RequestOptions::ON_HEADERS
Το callable δέχεται ένα αντικείμενο Psr\Http\Message\ResponseInterface
. Εάν μια εξαίρεση
εκπέμπεται από το callable, τότε η υπόσχεση που σχετίζεται με την απόκριση θα
απορρίπτεται με ένα GuzzleHttp\Exception\RequestException
που περιβάλλει την
εξαίρεση που προκλήθηκε.
Μπορεί να χρειαστεί να γνωρίζετε τις επικεφαλίδες και τους κωδικούς κατάστασης που ελήφθησαν πριν τα δεδομένα εγγραφούν στον αποδέκτη.
// Reject responses that are greater than 1024 bytes.
$client->request('GET', 'http://httpbin.org/stream/1024', [
'on_headers' => function (ResponseInterface $response) {
if ($response->getHeaderLine('Content-Length') > 1024) {
throw new \Exception('The file is too big!');
}
}
]);
Σημείωση
Όταν γράφετε χειριστές HTTP, πρέπει να καλείται η συνάρτηση on_headers
πριν από την εγγραφή δεδομένων στο σώμα της απόκρισης.
on_stats
σας επιτρέπει να αποκτήσετε πρόσβαση στα στατιστικά στοιχεία μεταφοράς μιας
αίτησης και να έχετε πρόσβαση στις λεπτομέρειες μεταφοράς χαμηλότερου επιπέδου του χειριστή
που σχετίζονται με τον πελάτη σας. on_stats
είναι ένα callable που καλείται
όταν ένας χειριστής έχει ολοκληρώσει την αποστολή μιας αίτησης. Το callback καλείται
με στατιστικά στοιχεία μεταφοράς σχετικά με την αίτηση, την απάντηση που ελήφθη ή την
σφάλμα που παρουσιάστηκε. Στα δεδομένα περιλαμβάνεται ο συνολικός χρόνος που χρειάστηκε
για την αποστολή της αίτησης
GuzzleHttp\RequestOptions::ON_STATS
Το callable δέχεται ένα αντικείμενο GuzzleHttp\TransferStats
.
use GuzzleHttp\TransferStats;
$client = new GuzzleHttp\Client();
$client->request('GET', 'http://httpbin.org/stream/1024', [
'on_stats' => function (TransferStats $stats) {
echo $stats->getEffectiveUri() . "\n";
echo $stats->getTransferTime() . "\n";
var_dump($stats->getHandlerStats());
// You must check if a response was received before using the
// response object.
if ($stats->hasResponse()) {
echo $stats->getResponse()->getStatusCode();
} else {
// Error data is handler specific. You will need to know what
// type of error data your handler uses before using this
// value.
var_dump($stats->getHandlerErrorData());
}
}
]);
Ορίζει μια συνάρτηση που θα καλείται όταν σημειώνεται πρόοδος στη μεταφορά
Κανένα
GuzzleHttp\RequestOptions::PROGRESS
Η συνάρτηση δέχεται τα ακόλουθα ορίσματα θέσης:
// Send a GET request to /get?foo=bar
$result = $client->request(
'GET',
'/',
[
'progress' => function(
$downloadTotal,
$downloadedBytes,
$uploadTotal,
$uploadedBytes
) {
//do something
},
]
);
Περάστε μια συμβολοσειρά για να καθορίσετε έναν διακομιστή μεσολάβησης HTTP, ή έναν πίνακα για να καθορίσετε διαφορετικούς μεσάζοντες για διαφορετικά πρωτόκολλα
Κανένα
GuzzleHttp\RequestOptions::PROXY
Περάστε μια συμβολοσειρά για να καθορίσετε έναν διακομιστή μεσολάβησης για όλα τα πρωτόκολλα.
$client->request('GET', '/', ['proxy' => 'http://localhost:8125']);
Περάστε έναν συσχετιστικό πίνακα για να καθορίσετε μεσάζοντες HTTP για συγκεκριμένα σχήματα URI
(π.χ. "http", "https"). Παρέχετε ένα no
ζεύγος τιμών-κλειδιών για να παρέχετε μια λίστα από
ονομάτων κεντρικών υπολογιστών στα οποία δεν θα πρέπει να γίνεται μεσολάβηση.
Σημείωση
Το Guzzle θα συμπληρώσει αυτόματα αυτή την τιμή με την τιμή του περιβάλλοντός σας
NO_PROXY
μεταβλητή περιβάλλοντος. Ωστόσο, όταν παρέχετε μια proxy
επιλογή αίτησης, εναπόκειται σε εσάς να παρέχετε την τιμή no
που αναλύεται από την
τη μεταβλητή περιβάλλοντος NO_PROXY
(π.χ., explode(',', getenv('NO_PROXY'))
).
$client->request('GET', '/', [
'proxy' => [
'http' => 'http://localhost:8125', // Use this proxy with "http"
'https' => 'http://localhost:9124', // Use this proxy with "https",
'no' => ['.mit.edu', 'foo.com'] // Don't use a proxy with these
]
]);
Σημείωση
Μπορείτε να παρέχετε διευθύνσεις URL μεσολάβησης που περιέχουν ένα σχήμα, όνομα χρήστη και κωδικό πρόσβασης.
Για παράδειγμα, "http://username:[email protected]:10"
.
Συναρτησιακός πίνακας τιμών συμβολοσειράς ερωτήματος ή συμβολοσειρά ερωτήματος για προσθήκη σε το αίτημα
Κανένα
GuzzleHttp\RequestOptions::QUERY
// Send a GET request to /get?foo=bar
$client->request('GET', '/get', ['query' => ['foo' => 'bar']]);
Οι συμβολοσειρές ερωτήσεων που καθορίζονται στην επιλογή query
θα αντικαταστήσουν όλες τις τιμές των συμβολοσειρών ερωτήσεων που παρέχονται στο URI μιας αίτησης.
// Send a GET request to /get?foo=bar
$client->request('GET', '/get?abc=123', ['query' => ['foo' => 'bar']]);
default_socket_timeout
ρύθμισης PHP iniGuzzleHttp\RequestOptions::READ_TIMEOUT
Το χρονικό όριο ισχύει για μεμονωμένες λειτουργίες ανάγνωσης σε ένα σώμα με ροή (όταν η επιλογή stream
είναι ενεργοποιημένη).
$response = $client->request('GET', '/stream', [
'stream' => true,
'read_timeout' => 10,
]);
$body = $response->getBody();
// Returns false on timeout
$data = $body->read(1024);
// Returns false on timeout
$line = fgets($body->detach());
Καθορίστε πού θα αποθηκεύεται το σώμα μιας απάντησης.
fopen()
resourcePsr\Http\Message\StreamInterface
PHP temp stream
GuzzleHttp\RequestOptions::SINK
Περάστε μια συμβολοσειρά για να καθορίσετε τη διαδρομή προς ένα αρχείο που θα αποθηκεύσει τα περιεχόμενα του σώματος απόκρισης:
$client->request('GET', '/stream/20', ['sink' => '/path/to/file']);
Περάστε έναν πόρο που επιστρέφεται από την fopen()
για να γράψετε την απόκριση σε μια ροή PHP:
$resource = \GuzzleHttp\Psr7\Utils::tryFopen('/path/to/file', 'w');
$client->request('GET', '/stream/20', ['sink' => $resource]);
Περάστε ένα αντικείμενο Psr\Http\Message\StreamInterface
για τη ροή του σώματος της απάντησης σε μια ανοικτή ροή PSR-7.
$resource = \GuzzleHttp\Psr7\Utils::tryFopen('/path/to/file', 'w');
$stream = \GuzzleHttp\Psr7\Utils::streamFor($resource);
$client->request('GET', '/stream/20', ['save_to' => $stream]);
Σημείωση
Η επιλογή αίτησης save_to
έχει καταργηθεί υπέρ της επιλογής
sink
επιλογή αίτησης. Η παροχή της επιλογής save_to
είναι πλέον ένα ψευδώνυμο
του sink
.
Καθορίστε τη διαδρομή προς ένα αρχείο που περιέχει ένα ιδιωτικό κλειδί SSL σε PEM μορφή. Εάν απαιτείται κωδικός πρόσβασης, τότε ορίστε έναν πίνακα που περιέχει τη διαδρομή στο κλειδί SSL στο πρώτο στοιχείο του πίνακα, ακολουθούμενο από τον απαιτούμενο κωδικό πρόσβασης. για το πιστοποιητικό στο δεύτερο στοιχείο
Κανένα
GuzzleHttp\RequestOptions::SSL_KEY
Σημείωση
ssl_key
υλοποιείται από τους χειριστές HTTP. Αυτό είναι προς το παρόν μόνο
υποστηρίζεται μόνο από τον χειριστή cURL, αλλά μπορεί να υποστηρίζεται και από άλλα τρίτα μέρη
handlers.
true
για να μεταφέρετε μια απάντηση σε ροή αντί να τη μεταφορτώσετε ολόκληρη.
εκ των προτέρων.false
GuzzleHttp\RequestOptions::STREAM
$response = $client->request('GET', '/stream/20', ['stream' => true]);
// Read bytes off of the stream until the end of the stream is reached
$body = $response->getBody();
while (!$body->eof()) {
echo $body->read(1024);
}
Σημείωση
Η υποστήριξη απόκρισης ροής πρέπει να υλοποιείται από τον χειριστή HTTP που χρησιμοποιείται από το ένας πελάτης. Αυτή η επιλογή μπορεί να μην υποστηρίζεται από κάθε χειριστή HTTP, αλλά το διεπαφή του αντικειμένου απόκρισης παραμένει η ίδια, ανεξάρτητα από το αν ή όχι υποστηρίζεται από τον χειριστή.
GuzzleHttp\RequestOptions::SYNCHRONOUS
Περιγράφει τη συμπεριφορά επαλήθευσης πιστοποιητικού SSL σε ένα αίτημα
true
για να ενεργοποιήσετε την επαλήθευση πιστοποιητικού SSL και να χρησιμοποιήσετε την προεπιλεγμένη
δέσμη CA που παρέχεται από το λειτουργικό σύστημα.false
για να απενεργοποιήσετε την επαλήθευση πιστοποιητικών (αυτό είναι ανασφαλές!)true
GuzzleHttp\RequestOptions::VERIFY
// Use the system's CA bundle (this is the default setting)
$client->request('GET', '/', ['verify' => true]);
// Use a custom SSL certificate on disk.
$client->request('GET', '/', ['verify' => '/path/to/cert.pem']);
// Disable validation entirely (don't do this!).
$client->request('GET', '/', ['verify' => false]);
Εάν δεν χρειάζεστε μια συγκεκριμένη δέσμη πιστοποιητικών, τότε η Mozilla παρέχει ένα συχνά χρησιμοποιούμενη δέσμη CA, την οποία μπορείτε να κατεβάσετε εδώ (παρέχεται από τον συντηρητή του cURL). Μόλις έχετε ένα πακέτο CA διαθέσιμο στο δίσκο, μπορείτε να ορίσετε τη ρύθμιση "openssl.cafile" PHP ini να δείχνει τη διαδρομή προς το το αρχείο, επιτρέποντάς σας να παραλείψετε την επιλογή αίτησης "verify". Πολύ περισσότερες λεπτομέρειες σχετικά με πιστοποιητικά SSL μπορείτε να βρείτε στην ιστοσελίδα ιστοσελίδα του cURL.
0
για να περιμένετε επ' αόριστον (η προεπιλεγμένη συμπεριφορά).0
GuzzleHttp\RequestOptions::TIMEOUT
// Timeout if a server does not return a response in 3.14 seconds.
$client->request('GET', '/delay/5', ['timeout' => 3.14]);
// PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\TransferException'
1.1
GuzzleHttp\RequestOptions::VERSION
// Force HTTP/1.0
$request = $client->request('GET', '/get', ['version' => 1.0]);