guzzle @ 6.0.0
integrity
- size
- 88.0 KiB
- downloaded
- last checked
- overlays
- composer
- detected
- composer guzzlehttp/guzzle
release notes
Guzzle now uses PSR-7 for HTTP messages.
Due to the fact that these messages are immutable, this prompted a refactoring
of Guzzle to use a middleware based system rather than an event system. Any
HTTP message interaction (e.g., GuzzleHttp\Message\Request) need to be
updated to work with the new immutable PSR-7 request and response objects. Any
event listeners or subscribers need to be updated to become middleware
functions that wrap handlers (or are injected into a
GuzzleHttp\HandlerStack).
- Removed
GuzzleHttp\BatchResults - Removed
GuzzleHttp\Collection - Removed
GuzzleHttp\HasDataTrait - Removed
GuzzleHttp\ToArrayInterface - The
guzzlehttp/streamsdependency has been removed. Stream functionality is now present in theGuzzleHttp\Psr7namespace provided by theguzzlehttp/psr7package. - Guzzle no longer uses ReactPHP promises and now uses the
guzzlehttp/promiseslibrary. We use a custom promise library for three significant reasons:- React promises (at the time of writing this) are recursive. Promise chaining and promise resolution will eventually blow the stack. Guzzle promises are not recursive as they use a sort of trampolining technique. Note: there has been movement in the React project to modify promises to no longer utilize recursion.
- Guzzle needs to have the ability to synchronously block on a promise to wait for a result. Guzzle promises allows this functionality (and does not require the use of recursion).
- Because we need to be able to wait on a result, doing so using React promises requires wrapping react promises with RingPHP futures. This overhead is no longer needed, reducing stack sizes, reducing complexity, and improving performance.
GuzzleHttp\Mimetypeshas been moved to a function inGuzzleHttp\Psr7\mimetype_from_extensionandGuzzleHttp\Psr7\mimetype_from_filename.GuzzleHttp\QueryandGuzzleHttp\QueryParserhave been removed. Query strings must now be passed into request objects as strings, or provided to thequeryrequest option when creating requests with clients. Thequeryoption uses PHP'shttp_build_queryto convert an array to a string. If you need a different serialization technique, you will need to pass the query string in as a string. There are a couple helper functions that will make working with query strings easier:GuzzleHttp\Psr7\parse_queryandGuzzleHttp\Psr7\build_query.- Guzzle no longer has a dependency on RingPHP. Due to the use of a middleware
system based on PSR-7, using RingPHP and it's middleware system as well adds
more complexity than the benefits it provides. All HTTP handlers that were
present in RingPHP have been modified to work directly with PSR-7 messages
and placed in the
GuzzleHttp\Handlernamespace. This significantly reduces complexity in Guzzle, removes a dependency, and improves performance. RingPHP will be maintained for Guzzle 5 support, but will no longer be a part of Guzzle 6. - As Guzzle now uses a middleware based systems the event system and RingPHP
integration has been removed. Note: while the event system has been removed,
it is possible to add your own type of event system that is powered by the
middleware system.
- Removed the
Eventnamespace. - Removed the
Subscribernamespace. - Removed
Transactionclass - Removed
RequestFsm - Removed
RingBridge GuzzleHttp\Subscriber\Cookieis now provided byGuzzleHttp\Middleware::cookiesGuzzleHttp\Subscriber\HttpErroris now provided byGuzzleHttp\Middleware::httpErrorGuzzleHttp\Subscriber\Historyis now provided byGuzzleHttp\Middleware::historyGuzzleHttp\Subscriber\Mockis now provided byGuzzleHttp\Middleware::mockGuzzleHttp\Subscriber\Prepareis now provided byGuzzleHttp\PrepareBodyMiddlewareGuzzleHttp\Subscriber\Redirectis now provided byGuzzleHttp\RedirectMiddleware
- Removed the
- Guzzle now uses
Psr\Http\Message\UriInterface(implements inGuzzleHttp\Psr7\Uri) for URI support.GuzzleHttp\Urlis now gone. - Static functions in
GuzzleHttp\Utilshave been moved to namespaced functions under theGuzzleHttpnamespace. This requires either a Composer based autoloader or you to include functions.php. GuzzleHttp\ClientInterface::getDefaultOptionhas been renamed toGuzzleHttp\ClientInterface::getConfig.GuzzleHttp\ClientInterface::setDefaultOptionhas been removed.
Migrating to middleware
The change to PSR-7 unfortunately required significant refactoring to Guzzle due to the fact that PSR-7 messages are immutable. Guzzle 5 relied on an event system from plugins. The event system relied on mutability of HTTP messages and side effects in order to work. With immutable messages, you have to change your workflow to become more about either returning a value (e.g., functional middlewares) or setting a value on an object. Guzzle v6 has chosen the functional middleware approach.
Instead of using the event system to listen for things like the before event,
you now create a stack based middleware function that intercepts a request on
the way in and the promise of the response on the way out. This is a much
simpler and more predictable approach than the event system and works nicely
with PSR-7 middleware. Due to the use of promises, the middleware system is
also asynchronous.
v5:
use GuzzleHttp\Event\BeforeEvent;
$client = new GuzzleHttp\Client();
// Get the emitter and listen to the before event.
$client->getEmitter()->on('before', function (BeforeEvent $e) {
// Guzzle v5 events relied on mutation
$e->getRequest()->setHeader('X-Foo', 'Bar');
});
v6:
In v6, you can modify the request before it is sent using the mapRequest
middleware. The idiomatic way in v6 to modify the request/response lifecycle is
to setup a handler middleware stack up front and inject the handler into a
client.
use GuzzleHttp\Middleware;
// Create a handler stack that has all of the default middlewares attached
$handler = GuzzleHttp\HandlerStack::create();
// Push the handler onto the handler stack
$handler->push(Middleware::mapRequest(function (RequestInterface $request) {
// Notice that we have to return a request object
return $request->withHeader('X-Foo', 'Bar');
});
// Inject the handler into the client
$client = new GuzzleHttp\Client(['handler' => $handler]);
download
curl -fL -o 6.0.0.zip https://ratatoskr.space/pkg/guzzle/6.0.0.zip
printf '%s %s\n' '7027e8639a88e310d7f8c7dc984ac5fe66f93df808f6754aa73d0508790e9e10' '6.0.0.zip' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/guzzle/6.0.0.zip"
$out = "6.0.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "7027e8639a88e310d7f8c7dc984ac5fe66f93df808f6754aa73d0508790e9e10") { throw "sha256 mismatch" }
curl -fL -o 6.0.0.tar.gz https://ratatoskr.space/pkg/guzzle/6.0.0.tar.gz
printf '%s %s\n' '8bd5dc77bacd07c8588e983bdb49b23bacf57178784e63da32e67860392c7e49' '6.0.0.tar.gz' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/guzzle/6.0.0.tar.gz"
$out = "6.0.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "8bd5dc77bacd07c8588e983bdb49b23bacf57178784e63da32e67860392c7e49") { throw "sha256 mismatch" }
download via yggdrasil mesh
curl -fL -o 6.0.0.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/guzzle/6.0.0.zip
printf '%s %s\n' '7027e8639a88e310d7f8c7dc984ac5fe66f93df808f6754aa73d0508790e9e10' '6.0.0.zip' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/guzzle/6.0.0.zip"
$out = "6.0.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "7027e8639a88e310d7f8c7dc984ac5fe66f93df808f6754aa73d0508790e9e10") { throw "sha256 mismatch" }
curl -fL -o 6.0.0.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/guzzle/6.0.0.tar.gz
printf '%s %s\n' '8bd5dc77bacd07c8588e983bdb49b23bacf57178784e63da32e67860392c7e49' '6.0.0.tar.gz' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/guzzle/6.0.0.tar.gz"
$out = "6.0.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "8bd5dc77bacd07c8588e983bdb49b23bacf57178784e63da32e67860392c7e49") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| 6.0.0.zip | zip | 87.7 KiB |
blake3-24 5b554dd1ad248b6cddbc475f76fef94478e0c0c20439b886
sha256 7027e8639a88e310d7f8c7dc984ac5fe66f93df808f6754aa73d0508790e9e10
sha1 2742358cd72c142c3645cae22579bc878e94ac88
|
| 6.0.0.tar.gz | tar.gz | 70.9 KiB |
blake3-24 8fb97ec745d1f021d84e978d0ff6af832b7e7cdc88c98d33
sha256 8bd5dc77bacd07c8588e983bdb49b23bacf57178784e63da32e67860392c7e49
sha1 0e190290ac5beb7353a7d5de788b9b139ef148b9
|
install
http_archive(
name = "guzzle",
urls = ["https://ratatoskr.space/pkg/guzzle/6.0.0.tar.gz"],
integrity = "sha256-i9Xcd7rNB8hYjpg720myO6z1cXh4TmPaMuZ4YDksfkk=",
strip_prefix = "guzzle-6.0.0",
)
.url = "https://ratatoskr.space/pkg/guzzle/6.0.0.tar.gz",
composer config repositories.yggvault composer https://ratatoskr.space/pkg composer require guzzlehttp/guzzle:6.0.0
install via yggdrasil mesh
http_archive(
name = "guzzle",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/guzzle/6.0.0.tar.gz"],
integrity = "sha256-i9Xcd7rNB8hYjpg720myO6z1cXh4TmPaMuZ4YDksfkk=",
strip_prefix = "guzzle-6.0.0",
)
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/guzzle/6.0.0.tar.gz",
composer config secure-http false composer config repositories.yggvault composer http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg composer require guzzlehttp/guzzle:6.0.0