guzzlehttp/guzzle
Guzzle is a PHP HTTP client library
8.0.2
1.1B downloads/mo
#13 most downloaded on composer
guzzle/guzzle
What this package is like to depend on
Last release 18 days ago
05 Aug 2026
Ships unpredictably
gaps range from 8 days to 9 months
Most releases are documented
notes for 140 of 175 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
180 releases · first in 2011
27 releases in the last 12 months
see the full history below
Release timeline
180 releases · Nov 2011 to Aug 2026Releases
latest 60 of 180-
8.0.205 Aug 2026Release notes
Open source →Changed
- Adjusted
guzzlehttp/promisesversion constraint to^3.0.1
Fixed
- Fail a cURL multi handler wait with an attributable error when the transfer is no longer tracked
- Fix
StreamHandlerresolving numeric IPv4 hosts differently from cURL handlers on macOS and Windows - Fix
StreamHandlerTLS peer names and proxy authorities for numeric IPv4 hosts on all platforms - Settle a cURL multi handler transfer displaced by a request reusing its native handle ID
Release notes
Open source →Changed
- Adjusted
guzzlehttp/promisesversion constraint to^3.0.1
Fixed
- Fail a cURL multi handler wait with an attributable error when the transfer is no longer tracked
- Fix
StreamHandlerresolving numeric IPv4 hosts differently from cURL handlers on macOS and Windows - Fix
StreamHandlerTLS peer names and proxy authorities for numeric IPv4 hosts on all platforms - Settle a cURL multi handler transfer displaced by a request reusing its native handle ID
- Adjusted
-
8.0.126 Jul 2026Release notes
Open source →Security
- Reject request URI hosts and
Hostheader values that are not printable ASCII (GHSA-v5mv-p594-2x33) - Reject URI hosts with a percent escape or that are not valid RFC 3986 hosts (GHSA-v5mv-p594-2x33)
- Reject numeric-looking URI hosts with trailing dots, read as IPv4 addresses (GHSA-v5mv-p594-2x33)
- Treat percent-escaped cookie domains as exact-match-only (GHSA-f7vp-7xgx-4w4r)
- Regenerate a derived
Hostheader after client URI rewrites (GHSA-v5mv-p594-2x33)
Release notes
Open source →Security
- Reject request URI hosts and
Hostheader values that are not printable ASCII (GHSA-v5mv-p594-2x33) - Reject URI hosts with a percent escape or that are not valid RFC 3986 hosts (GHSA-v5mv-p594-2x33)
- Reject numeric-looking URI hosts with trailing dots, read as IPv4 addresses (GHSA-v5mv-p594-2x33)
- Treat percent-escaped cookie domains as exact-match-only (GHSA-f7vp-7xgx-4w4r)
- Regenerate a derived
Hostheader after client URI rewrites (GHSA-v5mv-p594-2x33)
- Reject request URI hosts and
-
8.0.020 Jul 2026Release notes
Open source →Added
- Add
SensitiveParametermetadata to credential-bearing parameters so PHP 8.2+ redacts their values in exception traces - Add HTTP/3 request support to the built-in cURL handlers when PHP 8.4+ and libcurl provide HTTP/3 support
- Add
Multiplexing::NONEsupport as a client, cURL multi handler, and conditional request option - Add generic and structured PHPDoc annotations to client request/config option, async promise, handler, middleware, pool, and mock handler APIs
- Add
ConnectTimeoutExceptionfor connect-phase timeouts, extendingConnectException - Add
NetworkExceptionfor no-response network failures - Add
NetworkTimeoutExceptionfor no-response transport timeouts - Add
ResponseTransferException, withResponseTimeoutExceptionfor response-transfer timeouts - Add PSR-17
request_factory,response_factory,stream_factory, anduri_factoryrequest options - Add explicit
close()lifecycle methods to the built-in cURL handlers and concrete cURL factory - Add
HandlerClosedExceptionfor pending transfers rejected byCurlMultiHandler::close() - Add persistent transport sharing modes (
TransportSharing::PERSISTENT_PREFERandTransportSharing::PERSISTENT_REQUIRE) - Add
ProxyOptionsfor proxy option resolution - Add
ResponseExceptionfor request failures with responses - Add auth middleware for built-in Basic and Digest authentication
Changed
- Canonicalize IPv6 hosts in Digest challenge cache keys
- Canonicalize IPv6 hosts in cookie domains, host-only identities, and domain matching
- Restrict cookie domain suffix matching to valid non-literal, nonnumeric host names
- Reject Secure cookies and insecure overlays received over insecure connections
- Enforce the
__Secure-and__Host-prefix requirements on response cookies - Hardened
FileCookieJarandSessionCookieJarpersistence against unsafe unserialization - Reject native PHP serialization of runtime objects
- Restrict persisted
FileCookieJarcookie files to owner-only permissions - Require persisted cookie data to use JSON lists and construct all records before changing the jar
- Normalize persistent cookie JSON failures as
RuntimeException - Moved the internal
Utilstime, timeout, IDN, and environment helpers to dedicated internal classes - Adjusted
guzzlehttp/promisesversion constraint to^3.0 - Adjusted
guzzlehttp/psr7version constraint to^3.0 - Quote multipart
Content-Typeboundary parameters when required - Added parameter and return types to
SetCookiemethods - Added native property types to supported public cURL handler state properties
- Added a
stringreturn type toSetCookie::__toString() - Validate proxy and no-proxy option types strictly across handlers
- Match leading-dot no-proxy entries against the bare domain and split string no-proxy lists on whitespace
- Validate
force_ip_resolve, protocols, anddelayranges at the client boundary - Treat a matching proxy
noentry as final even without a scheme-specific proxy entry - Validate proxy URLs in the built-in handlers and reject malformed or unsupported ones up front
- Default a port-less proxy to 1080 in the stream handler, matching libcurl
- Downgrade HTTP/3 requests to HTTP/2 or HTTP/1.1 when the proxy is resolved from environment variables
- Throw
RequestException, notInvalidArgumentException, for an unavailable proxy or TLS feature - Resolve proxy environment variables in the stream handler, consistent with the cURL handlers
- Honor
no_proxy/NO_PROXYfrom the environment in the stream handler, including*to disable proxying - Reject an environment-resolved
https://or SOCKS proxy in the stream handler, matching itsproxyoption behavior - Require cURL proxy header separation for first-class
Proxy-Authorizationon every route - Reject every first-class
Proxy-Authorizationfield, including empty, on stream proxies - Reject raw
CURLOPT_PROXYHEADERwithout proxy header separation support - Pass the request as the second argument to
on_headerscallbacks - Pass the
Pooliterable key as a trailing argument to per-request observer callbacks - Declare strict types across remaining source files
- Reject request option values that do not match their documented types
- Reject invalid
idn_conversion,retries, and built-in handleron_statsoption values before use - Reject non-finite floats in the
queryandform_paramsoptions - Reject non-string scalar values in the
bodyoption - Apply automatic
Expect: 100-Continueinjection to HTTP/1.1 requests only - Reject invalid
SetCookieconstructor field types instead of coercing them - Validate and normalize request framing across the built-in cURL and stream handlers
- Reject raw cURL request options outside the built-in cURL handlers' allow-list
- Reject non-string raw cURL header-list entries before applying them
- Reject proxy tunnels that require fresh connections when persistent transport sharing requires reuse
- Reject PHP stream context options outside the built-in stream handler allow-list
- Reject selected request options ignored by incompatible built-in handlers
- Treat only
nullas an omitted path or name when clearing cookies - Validate malformed
authrequest option arrays - Reject colons in built-in Basic usernames and ASCII control characters in Basic credentials
- Move built-in Basic and Digest authentication handling to the default auth middleware
- Reject unchallenged Digest probes for body-bearing requests instead of replaying the request unauthenticated
- Reject malformed Digest challenge parameter lists that libcurl's Digest parser may have tolerated
- Reuse Digest challenges to authorize subsequent body-less requests preemptively
- Advance the Digest nonce count when a stale challenge repeats the same nonce during the initial handshake
- Remove first-class NTLM authentication from the
authrequest option - Stop forwarding the generic
authrequest option when following cross-origin redirects - Limit the
Refererheader to the origin on cross-origin redirects - Follow only redirect status codes 301, 302, 303, 307, and 308
- Reject invalid
HandlerStack::remove()arguments - Require
Poolrequest collections to be iterable - Raised the built-in cURL handler floor to libcurl 7.34.0 with SSL support
- Store response cookies without a
Domainattribute as host-only cookies - Prefer cookie
Max-AgeoverExpireswhen both attributes are present - Match cookie names case-sensitively in
CookieJar::getCookieByName() - Ignore float-like or exponent
Max-Agecookie values instead of truncating them - Tighten invalid response handling and avoid exposing response-derived cURL stats
- Reject malformed response protocol versions and reason phrases
- Escape controls and malformed UTF-8 when copying raw values into exception messages
- Reject malformed or conflicting response
Content-Lengthand combinations withTransfer-Encoding - Expose raw stream-handler
Transfer-Encodingmetadata and coalesced framing inprogresson newer PHP - Wrap malformed redirect
Locationvalues inBadResponseException - Default HTTPS requests sent by the built-in cURL and stream handlers to TLS 1.2 or newer
- Apply the stream handler
crypto_methodoption through the SSL context so it consistently controls the minimum TLS version - Validate built-in handler timeout options before applying them
- Require a request when constructing
TransferExceptionand its subclasses - Classify empty, malformed, or handler-unsupported request protocol versions as request exceptions
- Classify additional cURL transport failures without a response as
NetworkException - Classify stream connect failures as
ConnectException, with connect timeouts asConnectTimeoutException - Classify stream transport failures without a response as
NetworkException, with timeouts asNetworkTimeoutException - Classify generic response-aware request failures as
ResponseException - Classify response-aware transfer failures as
ResponseTransferException - The stream handler returns an empty body and releases the connection at the end of the headers for HEAD and CONNECT-2xx exchanges and 1xx, 204, and 304 responses
- The stream handler no longer writes to the
sinkoption or reads trailing bytes for responses that cannot carry a body - Reject short buffered stream-handler bodies against
Content-Length, including decoded gzip/deflate - Normalize duplicate
Content-Lengthcasings and preserve encoded values on decoded responses - Reject unrepresentable byte counts and response sizes requiring integer bounds as
ResponseException - Ignore cURL informational responses other than
101 Switching Protocolsbefore the final response - Treat response sink rewind failures as
ResponseExceptionand skip non-seekable sink rewinds - Classify redirect request-body rewind failures as
ResponseException - Ignore stream source close failures after a complete response body transfer
- Throw
GuzzleHttp\Exception\InvalidArgumentExceptionfor invalid built-in handler options - Classify built-in cURL handle,
sink, and HTTP/3 setup failures asRequestException - Throw
ConnectTimeoutExceptionfor connect timeouts - Throw
NetworkTimeoutExceptionfor cURL no-response timeout errors - Throw
ResponseTimeoutExceptionfor response-aware transfer timeouts - Enforce the
timeoutoption as a total transfer deadline in the stream handler when it buffers the response - Reject stream handler responses whose header block arrives after the
timeoutdeadline - Stop consulting the
default_socket_timeoutini setting in the stream handler - Treat stream handler
read_timeoutas an idle timeout for every request stage, defaulting to 60 seconds - Default the cURL connect timeout to 60 seconds, with
connect_timeoutset to0disabling it - Stop the stream handler from injecting
User-AgentandFromheader values from theuser_agentandfromini settings - Classify request-body stream size detection, read, stringification, and rewind failures as
RequestExceptionorResponseExceptionby phase - Classify cURL response sink write failures, including timeouts, as
ResponseExceptionorRequestExceptionby phase - Treat request method names case-sensitively in built-in handler and redirect method-specific behavior
- Treat PHP resources passed as
sinkas caller-owned in the built-in cURL and stream handlers - Use the configured PSR-17 URI factory when parsing redirect
Locationheaders - Allow built-in cURL handler
progresscallbacks to abort transfers with truthy return values - Normalize built-in handler
progresscallback arguments to integer byte counts - Reject built-in cURL
progressthrowables withResponseExceptionwhen a response exists, otherwiseRequestException - Release built-in cURL easy handles before invoking
on_stats - Prefer
CURLOPT_XFERINFOFUNCTIONfor built-in cURL progress callbacks when available - Made
MessageFormatterfinal and requiredMiddleware::log()formatters to implementMessageFormatterInterface - Made
CurlFactory,CurlHandler,CurlMultiHandler,MockHandler, andStreamHandlerfinal - Made static utility classes non-instantiable and declared
GuzzleHttp\Handler\Proxyfinal - Pass the request to
on_trailerscallbacks, reject non-callableon_trailersvalues, and wrapon_trailerscallback exceptions inResponseException - Wait for in-progress HTTP/2-capable connections by default (
multiplexdefaults toMultiplexing::WAIT) - Require libcurl 7.65.2 or newer for HTTP/2 requests so multiplex waiting is never silently unavailable
- Require libcurl 7.54.0 for HTTPS proxies and requests tunneled through HTTP proxies
- Suppress proxy CONNECT response headers for tunneled requests
- Point rejections of the raw
CURLOPT_PIPEWAITcURL option at themultiplexrequest option - Reject raw
CURLMOPT_PIPELININGin favour of themultiplexcURL multi handler option - Reject required multiplexing when the final
CURLOPT_HTTPAUTHmask permits NTLM - Reject cURL multi options that the runtime libcurl cannot apply
- Reject unknown handler constructor options
- Reject invalid
select_timeoutcURL multi handler option values - Reject raw cURL multi connection cap options in favour of the named options
- Parse
Set-Cookiestrings with RFC 6265 whitespace trimming - Ignore valueless
Set-Cookieattributes that require a value when parsing - Trim only the trailing CRLF from the stream handler header block
- Fail streamed uploads immediately when the body cannot be resent for an auth challenge
Removed
- Dropped support for PHP 7.2 and 7.3
- Removed
Client::__call(); use the typed HTTP verb methods orrequest()/requestAsync() - Removed
ClientInterface::getConfig(); the concreteClient::getConfig()remains available - Removed support for the
GUZZLE_CURL_SELECT_TIMEOUTenvironment variable; useCurlMultiHandler'sselect_timeoutoption - Removed support for the
handlerrequest option; configure the handler on the client - Removed direct access to
CurlMultiHandler::$_mh; passCURLMOPT_*values through constructoroptionsinstead - Removed
RedirectMiddleware::$defaultSettings; useRedirectMiddleware::DEFAULT_SETTINGS - Removed the deprecated
RetryMiddleware::exponentialDelay()method - Removed the deprecated
RequestException::wrapException()method - Removed the deprecated
Utils::describeType()method - Removed
Utils::jsonDecode()andUtils::jsonEncode()in favor of native JSON functions - Removed deprecated
GuzzleHttpnamespace functions in favor of native or class equivalents - Removed
Utils::defaultCaBundle(); rely on the system trust store or pass a bundle path via theverifyoption - Removed
HandlerStack::__toString() - Removed
RequestException::getHandlerContext()andConnectException::getHandlerContext() - Removed response access from
RequestException; useResponseException - Removed
Utils::isHostInNoProxy(); useProxyOptionshelpers for Guzzle 8 no-proxy matching - Removed
Utils::isUriInNoProxy(); useProxyOptions::isUriInNoProxy() - Removed
Handler\Proxy::wrapTlsFallback(); the default handler stack selects the cURL or stream handler by TLS support automatically
Release notes
Open source →Added
- Add
SensitiveParametermetadata to credential-bearing parameters so PHP 8.2+ redacts their values in exception traces - Add HTTP/3 request support to the built-in cURL handlers when PHP 8.4+ and libcurl provide HTTP/3 support
- Add
Multiplexing::NONEsupport as a client, cURL multi handler, and conditional request option - Add generic and structured PHPDoc annotations to client request/config option, async promise, handler, middleware, pool, and mock handler APIs
- Add
ConnectTimeoutExceptionfor connect-phase timeouts, extendingConnectException - Add
NetworkExceptionfor no-response network failures - Add
NetworkTimeoutExceptionfor no-response transport timeouts - Add
ResponseTransferException, withResponseTimeoutExceptionfor response-transfer timeouts - Add PSR-17
request_factory,response_factory,stream_factory, anduri_factoryrequest options - Add explicit
close()lifecycle methods to the built-in cURL handlers and concrete cURL factory - Add
HandlerClosedExceptionfor pending transfers rejected byCurlMultiHandler::close() - Add persistent transport sharing modes (
TransportSharing::PERSISTENT_PREFERandTransportSharing::PERSISTENT_REQUIRE) - Add
ProxyOptionsfor proxy option resolution - Add
ResponseExceptionfor request failures with responses - Add auth middleware for built-in Basic and Digest authentication
Changed
- Canonicalize IPv6 hosts in Digest challenge cache keys
- Canonicalize IPv6 hosts in cookie domains, host-only identities, and domain matching
- Restrict cookie domain suffix matching to valid non-literal, nonnumeric host names
- Reject Secure cookies and insecure overlays received over insecure connections
- Enforce the
__Secure-and__Host-prefix requirements on response cookies - Hardened
FileCookieJarandSessionCookieJarpersistence against unsafe unserialization - Reject native PHP serialization of runtime objects
- Restrict persisted
FileCookieJarcookie files to owner-only permissions - Require persisted cookie data to use JSON lists and construct all records before changing the jar
- Normalize persistent cookie JSON failures as
RuntimeException - Moved the internal
Utilstime, timeout, IDN, and environment helpers to dedicated internal classes - Adjusted
guzzlehttp/promisesversion constraint to^3.0 - Adjusted
guzzlehttp/psr7version constraint to^3.0 - Quote multipart
Content-Typeboundary parameters when required - Added parameter and return types to
SetCookiemethods - Added native property types to supported public cURL handler state properties
- Added a
stringreturn type toSetCookie::__toString() - Validate proxy and no-proxy option types strictly across handlers
- Match leading-dot no-proxy entries against the bare domain and split string no-proxy lists on whitespace
- Validate
force_ip_resolve, protocols, anddelayranges at the client boundary - Treat a matching proxy
noentry as final even without a scheme-specific proxy entry - Validate proxy URLs in the built-in handlers and reject malformed or unsupported ones up front
- Default a port-less proxy to 1080 in the stream handler, matching libcurl
- Downgrade HTTP/3 requests to HTTP/2 or HTTP/1.1 when the proxy is resolved from environment variables
- Throw
RequestException, notInvalidArgumentException, for an unavailable proxy or TLS feature - Resolve proxy environment variables in the stream handler, consistent with the cURL handlers
- Honor
no_proxy/NO_PROXYfrom the environment in the stream handler, including*to disable proxying - Reject an environment-resolved
https://or SOCKS proxy in the stream handler, matching itsproxyoption behavior - Require cURL proxy header separation for first-class
Proxy-Authorizationon every route - Reject every first-class
Proxy-Authorizationfield, including empty, on stream proxies - Reject raw
CURLOPT_PROXYHEADERwithout proxy header separation support - Pass the request as the second argument to
on_headerscallbacks - Pass the
Pooliterable key as a trailing argument to per-request observer callbacks - Declare strict types across remaining source files
- Reject request option values that do not match their documented types
- Reject invalid
idn_conversion,retries, and built-in handleron_statsoption values before use - Reject non-finite floats in the
queryandform_paramsoptions - Reject non-string scalar values in the
bodyoption - Apply automatic
Expect: 100-Continueinjection to HTTP/1.1 requests only - Reject invalid
SetCookieconstructor field types instead of coercing them - Validate and normalize request framing across the built-in cURL and stream handlers
- Reject raw cURL request options outside the built-in cURL handlers' allow-list
- Reject non-string raw cURL header-list entries before applying them
- Reject proxy tunnels that require fresh connections when persistent transport sharing requires reuse
- Reject PHP stream context options outside the built-in stream handler allow-list
- Reject selected request options ignored by incompatible built-in handlers
- Treat only
nullas an omitted path or name when clearing cookies - Validate malformed
authrequest option arrays - Reject colons in built-in Basic usernames and ASCII control characters in Basic credentials
- Move built-in Basic and Digest authentication handling to the default auth middleware
- Reject unchallenged Digest probes for body-bearing requests instead of replaying the request unauthenticated
- Reject malformed Digest challenge parameter lists that libcurl's Digest parser may have tolerated
- Reuse Digest challenges to authorize subsequent body-less requests preemptively
- Advance the Digest nonce count when a stale challenge repeats the same nonce during the initial handshake
- Remove first-class NTLM authentication from the
authrequest option - Stop forwarding the generic
authrequest option when following cross-origin redirects - Limit the
Refererheader to the origin on cross-origin redirects - Follow only redirect status codes 301, 302, 303, 307, and 308
- Reject invalid
HandlerStack::remove()arguments - Require
Poolrequest collections to be iterable - Raised the built-in cURL handler floor to libcurl 7.34.0 with SSL support
- Store response cookies without a
Domainattribute as host-only cookies - Prefer cookie
Max-AgeoverExpireswhen both attributes are present - Match cookie names case-sensitively in
CookieJar::getCookieByName() - Ignore float-like or exponent
Max-Agecookie values instead of truncating them - Tighten invalid response handling and avoid exposing response-derived cURL stats
- Reject malformed response protocol versions and reason phrases
- Escape controls and malformed UTF-8 when copying raw values into exception messages
- Reject malformed or conflicting response
Content-Lengthand combinations withTransfer-Encoding - Expose raw stream-handler
Transfer-Encodingmetadata and coalesced framing inprogresson newer PHP - Wrap malformed redirect
Locationvalues inBadResponseException - Default HTTPS requests sent by the built-in cURL and stream handlers to TLS 1.2 or newer
- Apply the stream handler
crypto_methodoption through the SSL context so it consistently controls the minimum TLS version - Validate built-in handler timeout options before applying them
- Require a request when constructing
TransferExceptionand its subclasses - Classify empty, malformed, or handler-unsupported request protocol versions as request exceptions
- Classify additional cURL transport failures without a response as
NetworkException - Classify stream connect failures as
ConnectException, with connect timeouts asConnectTimeoutException - Classify stream transport failures without a response as
NetworkException, with timeouts asNetworkTimeoutException - Classify generic response-aware request failures as
ResponseException - Classify response-aware transfer failures as
ResponseTransferException - The stream handler returns an empty body and releases the connection at the end of the headers for HEAD and CONNECT-2xx exchanges and 1xx, 204, and 304 responses
- The stream handler no longer writes to the
sinkoption or reads trailing bytes for responses that cannot carry a body - Reject short buffered stream-handler bodies against
Content-Length, including decoded gzip/deflate - Normalize duplicate
Content-Lengthcasings and preserve encoded values on decoded responses - Reject unrepresentable byte counts and response sizes requiring integer bounds as
ResponseException - Ignore cURL informational responses other than
101 Switching Protocolsbefore the final response - Treat response sink rewind failures as
ResponseExceptionand skip non-seekable sink rewinds - Classify redirect request-body rewind failures as
ResponseException - Ignore stream source close failures after a complete response body transfer
- Throw
GuzzleHttp\Exception\InvalidArgumentExceptionfor invalid built-in handler options - Classify built-in cURL handle,
sink, and HTTP/3 setup failures asRequestException - Throw
ConnectTimeoutExceptionfor connect timeouts - Throw
NetworkTimeoutExceptionfor cURL no-response timeout errors - Throw
ResponseTimeoutExceptionfor response-aware transfer timeouts - Enforce the
timeoutoption as a total transfer deadline in the stream handler when it buffers the response - Reject stream handler responses whose header block arrives after the
timeoutdeadline - Stop consulting the
default_socket_timeoutini setting in the stream handler - Treat stream handler
read_timeoutas an idle timeout for every request stage, defaulting to 60 seconds - Default the cURL connect timeout to 60 seconds, with
connect_timeoutset to0disabling it - Stop the stream handler from injecting
User-AgentandFromheader values from theuser_agentandfromini settings - Classify request-body stream size detection, read, stringification, and rewind failures as
RequestExceptionorResponseExceptionby phase - Classify cURL response sink write failures, including timeouts, as
ResponseExceptionorRequestExceptionby phase - Treat request method names case-sensitively in built-in handler and redirect method-specific behavior
- Treat PHP resources passed as
sinkas caller-owned in the built-in cURL and stream handlers - Use the configured PSR-17 URI factory when parsing redirect
Locationheaders - Allow built-in cURL handler
progresscallbacks to abort transfers with truthy return values - Normalize built-in handler
progresscallback arguments to integer byte counts - Reject built-in cURL
progressthrowables withResponseExceptionwhen a response exists, otherwiseRequestException - Release built-in cURL easy handles before invoking
on_stats - Prefer
CURLOPT_XFERINFOFUNCTIONfor built-in cURL progress callbacks when available - Made
MessageFormatterfinal and requiredMiddleware::log()formatters to implementMessageFormatterInterface - Made
CurlFactory,CurlHandler,CurlMultiHandler,MockHandler, andStreamHandlerfinal - Made static utility classes non-instantiable and declared
GuzzleHttp\Handler\Proxyfinal - Pass the request to
on_trailerscallbacks, reject non-callableon_trailersvalues, and wrapon_trailerscallback exceptions inResponseException - Wait for in-progress HTTP/2-capable connections by default (
multiplexdefaults toMultiplexing::WAIT) - Require libcurl 7.65.2 or newer for HTTP/2 requests so multiplex waiting is never silently unavailable
- Require libcurl 7.54.0 for HTTPS proxies and requests tunneled through HTTP proxies
- Suppress proxy CONNECT response headers for tunneled requests
- Point rejections of the raw
CURLOPT_PIPEWAITcURL option at themultiplexrequest option - Reject raw
CURLMOPT_PIPELININGin favour of themultiplexcURL multi handler option - Reject required multiplexing when the final
CURLOPT_HTTPAUTHmask permits NTLM - Reject cURL multi options that the runtime libcurl cannot apply
- Reject unknown handler constructor options
- Reject invalid
select_timeoutcURL multi handler option values - Reject raw cURL multi connection cap options in favour of the named options
- Parse
Set-Cookiestrings with RFC 6265 whitespace trimming - Ignore valueless
Set-Cookieattributes that require a value when parsing - Trim only the trailing CRLF from the stream handler header block
- Fail streamed uploads immediately when the body cannot be resent for an auth challenge
Removed
- Dropped support for PHP 7.2 and 7.3
- Removed
Client::__call(); use the typed HTTP verb methods orrequest()/requestAsync() - Removed
ClientInterface::getConfig(); the concreteClient::getConfig()remains available - Removed support for the
GUZZLE_CURL_SELECT_TIMEOUTenvironment variable; useCurlMultiHandler'sselect_timeoutoption - Removed support for the
handlerrequest option; configure the handler on the client - Removed direct access to
CurlMultiHandler::$_mh; passCURLMOPT_*values through constructoroptionsinstead - Removed
RedirectMiddleware::$defaultSettings; useRedirectMiddleware::DEFAULT_SETTINGS - Removed the deprecated
RetryMiddleware::exponentialDelay()method - Removed the deprecated
RequestException::wrapException()method - Removed the deprecated
Utils::describeType()method - Removed
Utils::jsonDecode()andUtils::jsonEncode()in favor of native JSON functions - Removed deprecated
GuzzleHttpnamespace functions in favor of native or class equivalents - Removed
Utils::defaultCaBundle(); rely on the system trust store or pass a bundle path via theverifyoption - Removed
HandlerStack::__toString() - Removed
RequestException::getHandlerContext()andConnectException::getHandlerContext() - Removed response access from
RequestException; useResponseException - Removed
Utils::isHostInNoProxy(); useProxyOptionshelpers for Guzzle 8 no-proxy matching - Removed
Utils::isUriInNoProxy(); useProxyOptions::isUriInNoProxy() - Removed
Handler\Proxy::wrapTlsFallback(); the default handler stack selects the cURL or stream handler by TLS support automatically
- Add
-
7.15.305 Aug 2026Release notes
Open source →Changed
- Adjusted
guzzlehttp/promisesversion constraint to^2.5.2
Fixed
- Fail a cURL multi handler wait with an attributable error when the transfer is no longer tracked
- Fix
StreamHandlerresolving numeric IPv4 hosts differently from cURL handlers on macOS and Windows - Fix
StreamHandlerTLS peer names and proxy authorities for numeric IPv4 hosts on all platforms - Settle a cURL multi handler transfer displaced by a request reusing its native handle ID
- Adjusted
-
7.15.226 Jul 2026Release notes
Open source →Security
- Reject non-printable-ASCII and percent-escaped URI hosts and
Hostheaders (GHSA-v5mv-p594-2x33) - Reject request URI hosts that contain a URI authority delimiter (GHSA-v5mv-p594-2x33)
- Reject numeric-looking URI hosts with trailing dots, read as IPv4 addresses (GHSA-v5mv-p594-2x33)
- Treat numeric-in-any-base and percent-escaped cookie domains as exact-match-only (GHSA-f7vp-7xgx-4w4r)
- Regenerate a derived
Hostheader after client URI rewrites (GHSA-v5mv-p594-2x33)
Fixed
- Preserve
RequestExceptionwhen the stream handler rejects a request before opening a stream
- Reject non-printable-ASCII and percent-escaped URI hosts and
-
7.15.118 Jul 2026Release notes
Open source →Security
- Preserve host-only cookie scope and require explicit persistence markers (GHSA-wm3w-8rrp-j577)
- Bound response cookie admission and generated
Cookieheaders (GHSA-f283-ghqc-fg79) - Exclude URI fragments from
Refererheaders generated for redirects (GHSA-h95v-h523-3mw8)
Release notes
Open source →Security
- Preserve host-only cookie scope and require explicit persistence markers (GHSA-wm3w-8rrp-j577)
- Bound response cookie admission and generated
Cookieheaders (GHSA-f283-ghqc-fg79) - Exclude URI fragments from
Refererheaders generated for redirects (GHSA-h95v-h523-3mw8)
-
7.15.017 Jul 2026Release notes
Open source →Added
- Added
Multiplexing::NONEsupport as a client, cURL multi handler, and conditional request option
Changed
- Adjusted
guzzlehttp/psr7version constraint to^2.13 - Use locale-independent ASCII folding for all case normalization and comparison
- Bound cURL upload reads to the declared
Content-Length - Sanitize the cURL error text exposed through exception handler context
- Fail closed when a named cURL multi connection cap cannot be applied
- Reject the request-level
CURLOPT_SHAREcURL option when named connection caps are configured - Strengthen old-libcurl SOCKS isolation for raw
CURLOPT_PRE_PROXYand opaque share handles - Isolate HTTP proxy tunnels from opaque shared connection caches
- Trigger runtime deprecations for previously deprecated functionality in 7.1.0
Deprecated
- Deprecated
Utils::jsonDecode()andUtils::jsonEncode()in favor of native JSON functions - Deprecated passing
CURLMOPT_PIPELININGin the cURL multi handleroptionsarray - Deprecated passing
CURLOPT_PROXYHEADERwithout cURL proxy header separation support
Fixed
- Defer cURL requests created from multi callbacks until native execution unwinds
- Fail synchronous waits from native cURL callbacks promptly instead of self-deadlocking
- Guard cURL multi handle removal against progress callbacks re-entering the handler
- Scope promise waits on the cURL multi handler to the awaited transfer
- Strip
Content-LengthandTransfer-Encodingwhen redirects discard the request body - Stop re-applying the
delayrequest option to followed redirects
Release notes
Open source →Added
- Added
Multiplexing::NONEsupport as a client, cURL multi handler, and conditional request option
Changed
- Adjusted
guzzlehttp/psr7version constraint to^2.13 - Use locale-independent ASCII folding for all case normalization and comparison
- Bound cURL upload reads to the declared
Content-Length - Sanitize the cURL error text exposed through exception handler context
- Fail closed when a named cURL multi connection cap cannot be applied
- Reject the request-level
CURLOPT_SHAREcURL option when named connection caps are configured - Strengthen old-libcurl SOCKS isolation for raw
CURLOPT_PRE_PROXYand opaque share handles - Isolate HTTP proxy tunnels from opaque shared connection caches
- Trigger runtime deprecations for previously deprecated functionality in 7.1.0
Deprecated
- Deprecated
Utils::jsonDecode()andUtils::jsonEncode()in favor of native JSON functions - Deprecated passing
CURLMOPT_PIPELININGin the cURL multi handleroptionsarray - Deprecated passing
CURLOPT_PROXYHEADERwithout cURL proxy header separation support
Fixed
- Defer cURL requests created from multi callbacks until native execution unwinds
- Fail synchronous waits from native cURL callbacks promptly instead of self-deadlocking
- Guard cURL multi handle removal against progress callbacks re-entering the handler
- Scope promise waits on the cURL multi handler to the awaited transfer
- Strip
Content-LengthandTransfer-Encodingwhen redirects discard the request body - Stop re-applying the
delayrequest option to followed redirects
- Added
-
7.14.214 Jul 2026Release notes
Open source →Security
- Prevent first-class and proxy URL credentials from reaching origins (GHSA-94pj-82f3-465w)
Release notes
Open source →Security
- Prevent first-class and proxy URL credentials from reaching origins (GHSA-94pj-82f3-465w)
-
7.14.113 Jul 2026Release notes
Open source →Changed
- Adjusted
guzzlehttp/psr7version constraint to^2.12.5
Fixed
- Fail closed when a proxy tunnel isolation cURL option cannot be applied
- Normalize Stringable proxy credential values before computing connection-reuse section signatures
- Restore conservative credential redaction for unparseable proxies with multiple
@separators - Redact request URI credentials from the stream handler connection error message
- Reject enabled response streaming (
stream => true) on cap-configured stream handlers - Distinguish CurlMultiHandler and StreamHandler outcomes in connection-cap custom-handler guidance
- Reject raw cURL options that conflict with explicit multiplexing guarantees
- Stop explicit multiplexing conflict checks faulting on non-array cURL multi
optionsvalues - Reject required multiplexing when the final
CURLOPT_HTTPAUTHmask permits NTLM - Require an integer
CURLMOPT_PIPELININGwhen combined with explicit multiplexing - Check the required multiplexing cleartext proxy rule against the final cURL configuration
- Bound cURL multi handler blocking selects by the earliest pending request delay
- Stop synchronous cURL multi handler waits blocking on other transfers once the target has settled
- Stop cURL multi completion processing double-settling promises canceled from completion callbacks
- Run ready promise queue tasks before sleeping for delayed cURL multi requests
- Avoid integer overflow in cURL multi delay timing on 32-bit platforms
- Roll back failed cURL multi handle attachment instead of leaving requests pending
- Release the cURL easy handle when the
on_statscallback throws - Normalize response trailer field names to lowercase with values in wire order
- Retain response trailers only when an
on_trailerscallback is configured - Validate the
on_trailerscallback before starting a cURL transfer - Reject the
on_trailersrequest option on the stream handler, which cannot observe trailers - Match cookies, proxy schemes, auth types, and header names with locale-independent ASCII folding
- Reject proxy option values that Guzzle cannot classify identically to ext-curl
Release notes
Open source →Changed
- Adjusted
guzzlehttp/psr7version constraint to^2.12.5
Fixed
- Fail closed when a proxy tunnel isolation cURL option cannot be applied
- Normalize Stringable proxy credential values before computing connection-reuse section signatures
- Restore conservative credential redaction for unparseable proxies with multiple
@separators - Redact request URI credentials from the stream handler connection error message
- Reject enabled response streaming (
stream => true) on cap-configured stream handlers - Distinguish CurlMultiHandler and StreamHandler outcomes in connection-cap custom-handler guidance
- Reject raw cURL options that conflict with explicit multiplexing guarantees
- Stop explicit multiplexing conflict checks faulting on non-array cURL multi
optionsvalues - Reject required multiplexing when the final
CURLOPT_HTTPAUTHmask permits NTLM - Require an integer
CURLMOPT_PIPELININGwhen combined with explicit multiplexing - Check the required multiplexing cleartext proxy rule against the final cURL configuration
- Bound cURL multi handler blocking selects by the earliest pending request delay
- Stop synchronous cURL multi handler waits blocking on other transfers once the target has settled
- Stop cURL multi completion processing double-settling promises canceled from completion callbacks
- Run ready promise queue tasks before sleeping for delayed cURL multi requests
- Avoid integer overflow in cURL multi delay timing on 32-bit platforms
- Roll back failed cURL multi handle attachment instead of leaving requests pending
- Release the cURL easy handle when the
on_statscallback throws - Normalize response trailer field names to lowercase with values in wire order
- Retain response trailers only when an
on_trailerscallback is configured - Validate the
on_trailerscallback before starting a cURL transfer - Reject the
on_trailersrequest option on the stream handler, which cannot observe trailers - Match cookies, proxy schemes, auth types, and header names with locale-independent ASCII folding
- Reject proxy option values that Guzzle cannot classify identically to ext-curl
- Adjusted
-
7.14.008 Jul 2026Release notes
Open source →Added
- Added the
on_trailersrequest option to expose parsed HTTP response trailers - Added the
multiplexrequest option withMultiplexing::*modes to control or require HTTP/2 multiplexing - Added rejection of explicit
multiplexrequests whenCURLMOPT_PIPELININGdisables multiplexing - Added the
max_host_connectionsandmax_total_connectionsclient and cURL multi handler options
Changed
- Redirects that discard the request body no longer require it to be rewindable
- Synchronous cURL multi handler requests no longer wait for other queued transfers
- Section SOCKS proxy connections by credentials on libcurl before 7.69.0
- Reject request-level
CURLOPT_SHAREwhen combined with authenticated SOCKS proxy configuration - Redact proxy userinfo containing raw control bytes in cURL errors
- Check linked curl/libcurl NTLM support before applying NTLM auth
- Clarify that NTLM is deprecated by both Guzzle and curl/libcurl
- Remove deprecation for the raw cURL
CURLOPT_CERTINFOoption - Warn when a cURL multi option cannot be applied
Deprecated
- Deprecate the raw
CURLOPT_PIPEWAITcURL option in favour of themultiplexrequest option - Deprecate unknown handler constructor options
- Deprecate invalid
select_timeoutcURL multi handler option values - Deprecate raw cURL multi connection cap options in favour of the named options
Release notes
Open source →Added
- Added the
on_trailersrequest option to expose parsed HTTP response trailers - Added the
multiplexrequest option withMultiplexing::*modes to control or require HTTP/2 multiplexing - Added rejection of explicit
multiplexrequests whenCURLMOPT_PIPELININGdisables multiplexing - Added the
max_host_connectionsandmax_total_connectionsclient and cURL multi handler options
Changed
- Redirects that discard the request body no longer require it to be rewindable
- Synchronous cURL multi handler requests no longer wait for other queued transfers
- Section SOCKS proxy connections by credentials on libcurl before 7.69.0
- Reject request-level
CURLOPT_SHAREwhen combined with authenticated SOCKS proxy configuration - Redact proxy userinfo containing raw control bytes in cURL errors
- Check linked curl/libcurl NTLM support before applying NTLM auth
- Clarify that NTLM is deprecated by both Guzzle and curl/libcurl
- Remove deprecation for the raw cURL
CURLOPT_CERTINFOoption - Warn when a cURL multi option cannot be applied
Deprecated
- Deprecate the raw
CURLOPT_PIPEWAITcURL option in favour of themultiplexrequest option - Deprecate unknown handler constructor options
- Deprecate invalid
select_timeoutcURL multi handler option values - Deprecate raw cURL multi connection cap options in favour of the named options
- Added the
-
7.13.308 Jul 2026Release notes
Open source →Changed
- Adjusted
guzzlehttp/promisesversion constraint to^2.5.1 - Adjusted
guzzlehttp/psr7version constraint to^2.12.4 - Pass explicit trim characters ahead of the PHP 8.6 trim default change
Fixed
- Stop matching cookie domains against hosts with a trailing newline
- Reject HTTP status codes and certificate type extensions with a trailing newline
- Treat PCRE engine failures as invalid cookie names during cookie validation
- Report PCRE engine failures when formatting log messages
- Report PCRE engine failures when splitting
no_proxyvalues
- Adjusted
-
7.13.205 Jul 2026Release notes
Open source →Fixed
- Stop the cURL multi handler busy-waiting on request delays shorter than one second
- Stop cURL HEAD requests with request bodies hanging on responses that declare a content length
- The cURL handler no longer transmits request bodies on HEAD requests
- Preserve response headers when a response includes HTTP trailers
- Harden cURL response header block detection when HTTP trailers are received
- Corrected the PSR-7 class names in the Pool iterator exception
- Redirect body rewind failures no longer leak a bare
RuntimeException
-
7.13.129 Jun 2026Release notes
Open source →Fixed
- Allow middleware to rewrite partial URIs before transports validate them
-
7.13.029 Jun 2026Release notes
Open source →Added
- Added the
crypto_method_maxrequest option to cap the maximum TLS protocol version - Added HTTP QUERY redirect support, preserving method and body on 301 and 302
Changed
- Section proxy tunnel connection reuse by credential so distinct credentials never share a tunnel
- Isolate concurrent foreign cURL proxy tunnels added while another owner's tunnel is active
- Route credentialed HTTP(S) proxy Proxy-Authorization headers through cURL proxy header handling
- Reject request-level
CURLOPT_SHAREwhen combined with authenticated HTTP/HTTPS proxy tunnel configuration - Remove deprecation for raw cURL
CURLOPT_PREREQFUNCTIONcallbacks when defined by PHP cURL - Route TLS 1.2
crypto_methodrequests to the stream handler when cURL cannot select TLS 1.2 - Reject final request URIs missing a scheme or host before transfer
Deprecated
- Deprecate invalid protocols, force_ip_resolve, delay, cookies, and allow_redirects values
- Added the
-
7.12.323 Jun 2026Release notes
Open source →Changed
- Adjusted
guzzlehttp/psr7version constraint to^2.12.3
Security
- Treat IP and numeric cookie domains as exact-match-only (GHSA-g446-98w2-8p5w)
- Adjusted
-
7.12.223 Jun 2026Release notes
Open source →Fixed
- Clamp out-of-range
Max-Ageso a very large value no longer overflows to an already-expired timestamp - Use strict comparison in
CookieJarconflict resolution so distinct numeric-string names don't overwrite - Store a cookie whose
Domainhas a trailing dot on the origin host instead of silently discarding it - Fix
StreamHandlerhard-failing on bracketed IPv6 literal hosts whenforce_ip_resolveis set - Use strict cookie
Pathcomparison soCookieJar::clear()with a numeric path keeps a distinct-path cookie - Fixed cookie handling for falsey
Domain,Max-Age, path, and name values - Fixed
decode_contenthandling for falsey string values - Fixed deprecated request option values reaching built-in handlers before normalization
- Clamp out-of-range
-
7.12.118 Jun 2026Release notes
Open source →Changed
- Adjusted
guzzlehttp/psr7version constraint to^2.12.1
Fixed
- Reject proxy URLs with a malformed scheme in the cURL handlers instead of letting libcurl mishandle them
Security
- Reject HTTPS proxies when the installed libcurl lacks HTTPS-proxy support (GHSA-wpwq-4j6v-78m3)
- Reject dot-only cookie
Domainattributes as match-all (GHSA-cwxw-98qj-8qjx)
- Adjusted
-
7.12.016 Jun 2026Release notes
Open source →Added
- Added
RequestOptionsconstants forcurl,retries, andstream_context
Changed
- Adjusted
guzzlehttp/psr7version constraint to^2.12 - Constrain cURL transport sharing to safe libcurl DNS and SSL session support
- Resolve proxy environment variables in the cURL handlers; libcurl no longer reads the environment itself
- Ignore proxy environment variables when the
proxyrequest option makes a decision - Disable proxy environment variables on Windows SAPIs other than CLI (httpoxy hardening)
- Redact proxy credentials from cURL handler error messages, following
Psr7\Utils::redactUserInfo() - Normalize no-proxy domain and IP literal matching across the cURL and stream handlers
Deprecated
- Deprecated the request-level
handleroption, which will be ignored in 8.0 - Deprecated raw cURL request options outside the built-in cURL handlers' allow-list
- Deprecated the
CURLOPT_PROXYTYPEcURL request option; set the proxy type via a scheme-prefixed proxy URL - Deprecated PHP stream context options outside the built-in stream handler allow-list
- Deprecated passing
ntlmas a built-inauthtype - Deprecated
Utils::describeType() - Deprecated non-finite floats in the
queryandform_paramsoptions; 8.0 rejects them - Deprecated non-string scalar values in the
bodyoption; 8.0 rejects them
Fixed
- Fix cURL TLS and HTTP/2 capability detection using libcurl feature checks
- Fix proxy
nolist matches being re-proxied through environment-configured proxies by libcurl - Fix
nolist andNO_PROXYmatching to support IP CIDR ranges, matching libcurl - Fix the stream handler not applying scheme-less proxies and their credentials
- Added
-
7.11.212 Jun 2026Release notes
Open source →Fixed
- Fixed non-finite float values emitting coercion warnings on PHP 8.5
-
7.11.107 Jun 2026Release notes
Open source →Fixed
- Ignore request-level
transport_sharing, matching other unknown request options
- Ignore request-level
-
7.11.002 Jun 2026Release notes
Open source →Added
- Added support for providing the
proxyrequest option'snovalue as a comma-delimited string - Added the
protocolsrequest option to restrict allowed URI schemes for request transfers - Added
cert_typeandssl_key_typerequest options for TLS certificate and private-key file types - Added PHP stream handler support for the
ssl_keyrequest option - Added transport sharing via the
transport_sharingclient and cURL handler options
Changed
- Adjusted
guzzlehttp/promisesversion constraint to^2.5 - Adjusted
guzzlehttp/psr7version constraint to^2.11 - Allowed domainless
SetCookieinstances to be stored without wildcard request matching - Changed no-proxy matching to respect request ports for host-and-port rules
- Prevented
CurlMultiHandlerdestructors from throwing during cleanup - Improved invalid response handling across handlers
Deprecated
- Deprecated non-iterable
Poolrequest collections, which will be rejected in 8.0 - Deprecated non-uppercase easy request methods; 8.0 preserves method casing
- Deprecated non-string
headersrequest option values, which will be rejected in 8.0 - Deprecated empty
headersrequest option value arrays, which will be rejected in 8.0 - Deprecated empty and malformed request protocol versions, which will be rejected in 8.0
- Deprecated conflicting raw cURL request options, including
CURLOPT_SHARE, which will be rejected in 8.0 - Deprecated scalar-coerced
idn_conversionrequest option values, which will be rejected in 8.0 - Deprecated invalid documented request option value types, which will be rejected in 8.0
- Deprecated selected request options ignored by incompatible built-in handlers, which will be rejected in 8.0
- Deprecated
RequestException::wrapException(), which will be removed in 8.0 - Deprecated
RetryMiddleware::exponentialDelay(), which will be removed in 8.0
- Added support for providing the
-
7.10.601 Jun 2026Release notes
Open source →Fixed
CurlMultiHandlernow rejects the promise whenCurlFactory::finish()throws, preserving sibling transfersSetCookienow normalizes unparseableExpiresvalues tonullinstead offalse- Fix stream handler decoded
gzip/deflatetruncation by dropping invalidContent-Length
-
7.10.527 May 2026Release notes
Open source →Fixed
- Defer cURL multi cancellation cleanup until after progress callbacks return
- Classify additional stream handler connection failures as
ConnectException
-
7.10.422 May 2026Release notes
Open source →Fixed
- Fix IPv6 literal matching in no-proxy rules
- Handle cURL multi completion messages without handles after cancelled transfers
- Fix magic client request methods such as
options()to uppercase inferred HTTP methods
-
7.10.320 May 2026Release notes
Open source →Fixed
- Fail clearly when an HTTP response header line is invalid
- Remove middleware by name when the name is also a callable string
- Treat empty request protocol versions as HTTP/1.1
-
7.10.220 May 2026Release notes
Open source →Fixed
- Normalize HTTP version request options before applying them to PSR-7 requests
- Use string values for headers generated by request preparation and response decoding
-
7.10.119 May 2026Release notes
Open source →Fixed
- Fail clearly when cURL options cannot be applied
- Fail clearly when the certificate option is malformed
- Fail clearly when JSON decode depth is invalid
- Fail clearly when session cookie data is malformed
- Fail clearly when the stream progress option is not callable
- Prevent response creation failures from exposing stale cURL responses
-
7.10.023 Aug 2025Release notes
Open source →Added
- Support for PHP 8.5
Changed
- Adjusted
guzzlehttp/promisesversion constraint to^2.3 - Adjusted
guzzlehttp/psr7version constraint to^2.8
-
7.9.327 Mar 2025Release notes
Open source →Changed
- Remove explicit content-length header for GET requests
- Improve compatibility with bad servers for boolean cookie values
-
7.9.224 Jul 2024Release notes
Open source →Fixed
- Adjusted handler selection to use cURL if its version is 7.21.2 or higher, rather than 7.34.0
-
7.9.119 Jul 2024 -
7.9.018 Jul 2024Release notes
Open source →Changed
- Improve protocol version checks to provide feedback around unsupported protocols
- Only select the cURL handler by default if 7.34.0 or higher is linked
- Improved
CurlMultiHandlerto avoid busy wait if possible - Dropped support for EOL
guzzlehttp/psr7v1 - Improved URI user info redaction in errors
-
7.8.218 Jul 2024 -
7.8.103 Dec 2023Release notes
Open source →Changed
- Updated links in docs to their canonical versions
- Replaced
call_user_func*with native calls
-
7.8.027 Aug 2023Release notes
Open source →Added
- Support for PHP 8.3
- Added automatic closing of handles on
CurlFactoryobject destruction
-
7.7.127 Aug 2023 -
7.7.021 May 2023 -
7.6.115 May 2023Release notes
Open source →Fixed
- Fix
SetCookie::fromStringMaxAge deprecation warning and skip invalid MaxAge values
- Fix
-
7.6.014 May 2023Release notes
Open source →Added
- Support for setting the minimum TLS version in a unified way
- Apply on request the version set in options parameters
-
7.5.315 May 2023Nothing published for this version
-
7.5.214 May 2023Release notes
Open source →Fixed
- Fixed set cookie constructor validation
- Fixed handling of files with
'0'body
Changed
- Corrected docs and default connect timeout value to 300 seconds
-
7.5.117 Apr 2023Release notes
Open source →Fixed
- Fixed
NO_PROXYsettings so that setting theproxyoption tonooverrides the env variable
Changed
- Adjusted
guzzlehttp/psr7version constraint to^1.9.1 || ^2.4.5
- Fixed
-
7.5.028 Aug 2022 -
7.4.520 Jun 2022Release notes
Open source →Fixed
- Fix change in port should be considered a change in origin
- Fix
CURLOPT_HTTPAUTHoption not cleared on change of origin
-
7.4.409 Jun 2022Release notes
Open source →Fixed
- Fix failure to strip Authorization header on HTTP downgrade
- Fix failure to strip the Cookie header on change in host or HTTP downgrade
-
7.4.325 May 2022 -
7.4.220 Mar 2022Release notes
Open source →Fixed
- Remove curl auth on cross-domain redirects to align with the Authorization HTTP header
- Reject non-HTTP schemes in StreamHandler
- Set a default ssl.peer_name context in StreamHandler to allow
force_ip_resolve
-
7.4.106 Dec 2021 -
7.4.018 Oct 2021Release notes
Open source →Added
Fixed
- Make sure we always call
restore_error_handler()#2915 - Fix progress parameter type compatibility between the cURL and stream handlers #2936
- Throw
InvalidArgumentExceptionwhen an incorrectheadersarray is provided #2916, #2942
Changed
- Make sure we always call
-
7.3.023 Mar 2021Release notes
Open source →Added
- Support for DER and P12 certificates #2413
- Support the cURL (http://) scheme for StreamHandler proxies #2850
- Support for
guzzlehttp/psr7:^2.0#2878
Fixed
- Handle exceptions on invalid header consistently between PHP versions and handlers #2872
-
7.2.010 Oct 2020Release notes
Open source →Added
- Support for PHP 8 #2712, #2715, #2789
- Support passing a body summarizer to the http errors middleware #2795
Fixed
- Handle exceptions during response creation #2591
- Fix CURLOPT_ENCODING not to be overwritten #2595
- Make sure the Request always has a body object #2804
Changed
Deprecated
- Using environment variable GUZZLE_CURL_SELECT_TIMEOUT #2786
-
7.1.130 Sep 2020Release notes
Open source →Fixed
- Incorrect EOF detection for response body streams on Windows.
Changed
- We dont connect curl
sinkon HEAD requests. - Removed some PHP 5 workarounds
-
7.1.022 Sep 2020Release notes
Open source →Added
GuzzleHttp\MessageFormatterInterface
Fixed
- Fixed issue that caused cookies with no value not to be stored.
- On redirects, we allow all safe methods like GET, HEAD and OPTIONS.
- Fixed logging on empty responses.
- Make sure MessageFormatter::format returns string
Deprecated
- All functions in
GuzzleHttphas been deprecated. Use static methods onUtilsinstead. ClientInterface::getConfig()Client::getConfig()Client::__call()Utils::defaultCaBundle()CurlFactory::LOW_CURL_VERSION_NUMBER
-
7.0.127 Jun 2020 -
7.0.027 Jun 2020 -
7.0.0-rc.115 Jun 2020 pre-releaseNothing published for this version
-
7.0.0-beta.225 May 2020 pre-releaseNothing published for this version
-
7.0.0-beta.130 Dec 2019 pre-releaseNothing published for this version
-
6.5.820 Jun 2022Nothing published for this version
-
6.5.709 Jun 2022Nothing published for this version