NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #16 most downloaded on Packagist
Guzzle is a PHP HTTP client library
Last release 25 days ago
06 Sep 2026
Ships unpredictably
gaps range from 8 days to 9 months
Nearly every release is documented
notes for 56 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
185 releases · first in 2011
Added the ability to get the exception associated with a request/command when using MultiTransferException and CommandTransferException.
MultiTransferException and
CommandTransferException.additionalParameters of a response to false is now honored when parsing responses with a service description\Iterator instead of \Traversable.Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander See https://github.com/guzzle/guzzle/issues/371
One column per quarter.
Guzzle\Common\AbstractHasDispatcher::dispatch() now returns the event that was dispatchedGuzzle\Http\QueryString::factory() now guesses the most appropriate query aggregator to used based on the input.
See https://github.com/guzzle/guzzle/issues/379operation.parse_class event. See
https://github.com/guzzle/guzzle/pull/380Bug fix: Setting default options on a client now works
<> and quotescert and ssl_key as request optionsHost header can now diverge from the host part of a URL if the header is set manuallyGuzzle\Service\Command\LocationVisitor\Request\XmlVisitor was rewritten to change from using SimpleXML to XMLWriterfalse if Guzzle\Http\EntityBody::getContentMd5() failsContent-MD5 on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin…Now triggering an E_USER_DEPRECATED warning when used. Use $message->getHeader()->parseParams().
\Guzzle.
See Guzzle\Http\StaticClient::mount.command.request_options to Guzzle\Service\Command\AbstractCommand to pass request options to requests
created by a command (e.g. custom headers, query string variables, timeout settings, etc.).Guzzle\Stream\PhpStreamRequestFactory will now be set if Content-Length is returned in the
headers of a responseGuzzle\Common\Collection::setPath($path, $value) to set a value into an array using a nested key
(e.g. $collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];)Guzzle\Http\Message\Response now implements \SerializableGuzzle\Cache\CacheAdapterFactory::fromCache() to more easily create cache adaptersGuzzle\Service\ClientInterface::execute() now accepts an array, single command, or TraversableGuzzle\Http\Message\Header\Link::addLink()Guzzle\Stream\Stream using fstat() and caching the sizeGuzzle\Common\Exception\ExceptionCollection now creates a more readable exception messageGuzzle\Http\Message\AbstractMessage::getTokenizedHeader().
Now triggering an E_USER_DEPRECATED warning when used. Use $message->getHeader()->parseParams().Guzzle\Common\Collection$options argument to the end of the following methods of Guzzle\Http\ClientInterface:
createRequest, head, delete, put, patch, post, options, prepareRequest$options argument to the end of Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()applyOptions() method to Guzzle\Http\Message\Request\RequestFactoryInterfaceGuzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null) to
Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array()). You can still pass in a
resource, string, or EntityBody into the $options parameter to specify the download location of the response.Guzzle\Common\Collection::__construct($data) to no longer accepts a null value for $data but a
default array()Guzzle\Stream\StreamInterface::isRepeatableGuzzle\Http\ClientInterface::setDefaultHeaders(). Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value'). or
$client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`.Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers').Guzzle\Http\ClientInterface::expandTemplate()Guzzle\Http\ClientInterface::setRequestFactory()Guzzle\Http\ClientInterface::getCurlMulti()Guzzle\Http\Message\RequestInterface::canCacheGuzzle\Http\Message\RequestInterface::setIsRedirectGuzzle\Http\Message\RequestInterface::isRedirectGuzzle\Http\Client::expandTemplate and getUriTemplate protected methods.Guzzle\Common\Version::$emitWarnings to true.Guzzle\Http\Message\Request::isResponseBodyRepeatable() as deprecated. Use
$request->getResponseBody()->isRepeatable() instead.Guzzle\Http\Message\Request::canCache() as deprecated. Use
Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest() instead.Guzzle\Http\Message\Request::canCache() as deprecated. Use
Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest() instead.Guzzle\Http\Message\Request::setIsRedirect() as deprecated. Use the HistoryPlugin instead.Guzzle\Http\Message\Request::isRedirect() as deprecated. Use the HistoryPlugin instead.Guzzle\Cache\CacheAdapterFactory::factory() as deprecatedGuzzle\Http\Client as deprecated. Use [request.options][params].Guzzle\Service\Client::enableMagicMethods() as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.Guzzle\Service\Client::getDefaultHeaders() as deprecated. Use $client->getConfig()->getPath('request.options/headers')`.Guzzle\Service\Client::setDefaultHeaders() as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`.Guzzle\Parser\Url\UrlParser as deprecated. Just use PHP's parse_url() and percent encode your UTF-8.Guzzle\Common\Collection::inject() as deprecated.Guzzle\Plugin\CurlAuth\CurlAuthPlugin as deprecated. Use $client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');CacheStorageInterface::cache($key, Response $response, $ttl = null) has changed to cache(RequestInterface $request, Response $response);CacheStorageInterface::fetch($key) has changed to fetch(RequestInterface $request);CacheStorageInterface::delete($key) has changed to delete(RequestInterface $request);CacheStorageInterface::purge($url)DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin $plugin) has changed to DefaultRevalidation::__construct(CacheStorageInterface $cache, CanCacheStrategyInterface $canCache = null)RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object instead.
Guzzle\Service\Command\CommandInterface typehint now request a
Guzzle\Service\Command\ArrayCommandInterface.Guzzle\Http\Message\RequestInterface::startResponse() to the RequestInterface to handle injecting a response
on a request while the request is still being transferredGuzzle\Service\Command\CommandInterface now extends from ToArrayInterface and ArrayAccessDeprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference to help with refcount based garbag…
Guzzle\Log\MessageFormatter now properly writes "total_time" and "connect_time" valuesResponse::getPreviousResponse() (method signature still exists, but it's deprecated). Use the
HistoryPlugin for a history.responseBody alias for the response_body locationgetEffectiveUrl() and getRedirectCount() to Response objectsBug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response
Bug fix: Stream objects now work correctly with "a" and "a+" modes
Transfer-Encoding: chunked header when a Content-Length is presentAdded support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax
Bug fix: URLs are now resolved correctly based on https://datatracker.ietf.org/doc/html/rfc3986#section-5.2. #289
number type to service descriptions.oauth_token if the value is null in the OauthPlugin.command.after_prepare eventoauth_callback parameter to the OauthPluginadditionalParameters in service descriptions to define how custom parameters are serialized.Added the ability to create PHP streaming responses from HTTP requests
A large number of performance optimizations have been made
Guzzle\Http\Message\Response::json() now allows scalar values to be returnedGuzzle\Http\Message\Response where wrapping quotes were stripped from getEtag()Guzzle\Http\Utils classGuzzle\Stream\Stream::getWrapper() and Guzzle\Stream\Stream::getSteamType() are no longer converted to
lowercaseGuzzle\Service\Command\ResponseClassInterfaceCurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients.
CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444)
Adding wildcard support to Guzzle\Common\Collection::getPath()
BC: CurlException now extends from RequestException rather than BadResponseException
extends attributes to service description parametersFixing phar detection when forcing a cacert to system if null or true
Guzzle\Http\Message\Request::setResponseBody()Guzzle\Common\Collection::inject methodCurlMulti performance improvements
Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin
Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value
Implementing redirects in PHP rather than cURL
Magic methods are enabled by default on clients
Models can now be used like regular collection objects by calling filter, map, etc.
\AppendIteratorRewrote service description format to be based on Swagger
commands to operationsBug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did
Bug: Fixed config file aliases for JSON includes
Added the ability to modify and build service descriptions
json parameter locationBug: Suppressed empty arrays from URI templates
Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin
body_as_string in a request's curl options to enable.Bug: Fixed a case where empty POST requests were sent as GET requests
getParamNames() and hasParam()Bug: Query string values set to 0 are no longer dropped from the query string
Guzzle\Service\Command\AbstractCommand::getRequestHeaders()+ is now treated as an encoded space when parsing query stringsLoosening Event Dispatcher dependency
Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl)
curl. prefixed parametersBC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser.
Minor patch to update version number in UA string
BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes.
Adding result_type, result_doc, deprecated, and doc_url to service descriptions
BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource()
BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class.
[BC] Guzzle\Common\FromConfigInterface no longer requires any config options.
[Http] Better handling of nested scope requests in CurlMulti. Requests are now always prepares in the send() method rather than the addRequest() metho
[BC] Removing 'path' support in service descriptions. Use 'uri'.
[BC] Guzzle\Guzzle is now deprecated
[BC] Simplifying Guzzle\Common\Collection. Please check to see if you are using features that are now deprecated.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →