Skip to content

[TASK] Update Guzzle (major) - #293

Merged
eliashaeussler merged 2 commits into
mainfrom
renovate/major-guzzle
Jul 28, 2026
Merged

[TASK] Update Guzzle (major)#293
eliashaeussler merged 2 commits into
mainfrom
renovate/major-guzzle

Conversation

@renovate

@renovate renovate Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
guzzlehttp/guzzle (source) ^6.5 || ^7.0^6.5 || ^7.0 || ^8.0 age adoption passing confidence
guzzlehttp/psr7 ^1.9 || ^2.0^1.9 || ^2.0 || ^3.0 age adoption passing confidence

Release Notes

guzzle/guzzle (guzzlehttp/guzzle)

v8.0.1

Compare Source

Security

v8.0.0

Compare Source

Added
  • Add SensitiveParameter metadata 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::NONE support 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 ConnectTimeoutException for connect-phase timeouts, extending ConnectException
  • Add NetworkException for no-response network failures
  • Add NetworkTimeoutException for no-response transport timeouts
  • Add ResponseTransferException, with ResponseTimeoutException for response-transfer timeouts
  • Add PSR-17 request_factory, response_factory, stream_factory, and uri_factory request options
  • Add explicit close() lifecycle methods to the built-in cURL handlers and concrete cURL factory
  • Add HandlerClosedException for pending transfers rejected by CurlMultiHandler::close()
  • Add persistent transport sharing modes (TransportSharing::PERSISTENT_PREFER and TransportSharing::PERSISTENT_REQUIRE)
  • Add ProxyOptions for proxy option resolution
  • Add ResponseException for 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 FileCookieJar and SessionCookieJar persistence against unsafe unserialization
  • Reject native PHP serialization of runtime objects
  • Restrict persisted FileCookieJar cookie 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 Utils time, timeout, IDN, and environment helpers to dedicated internal classes
  • Adjusted guzzlehttp/promises version constraint to ^3.0
  • Adjusted guzzlehttp/psr7 version constraint to ^3.0
  • Quote multipart Content-Type boundary parameters when required
  • Added parameter and return types to SetCookie methods
  • Added native property types to supported public cURL handler state properties
  • Added a string return type to SetCookie::__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, and delay ranges at the client boundary
  • Treat a matching proxy no entry 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, not InvalidArgumentException, for an unavailable proxy or TLS feature
  • Resolve proxy environment variables in the stream handler, consistent with the cURL handlers
  • Honor no_proxy/NO_PROXY from the environment in the stream handler, including * to disable proxying
  • Reject an environment-resolved https:// or SOCKS proxy in the stream handler, matching its proxy option behavior
  • Require cURL proxy header separation for first-class Proxy-Authorization on every route
  • Reject every first-class Proxy-Authorization field, including empty, on stream proxies
  • Reject raw CURLOPT_PROXYHEADER without proxy header separation support
  • Pass the request as the second argument to on_headers callbacks
  • Pass the Pool iterable 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 handler on_stats option values before use
  • Reject non-finite floats in the query and form_params options
  • Reject non-string scalar values in the body option
  • Apply automatic Expect: 100-Continue injection to HTTP/1.1 requests only
  • Reject invalid SetCookie constructor 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 null as an omitted path or name when clearing cookies
  • Validate malformed auth request 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 auth request option
  • Stop forwarding the generic auth request option when following cross-origin redirects
  • Limit the Referer header to the origin on cross-origin redirects
  • Follow only redirect status codes 301, 302, 303, 307, and 308
  • Reject invalid HandlerStack::remove() arguments
  • Require Pool request collections to be iterable
  • Raised the built-in cURL handler floor to libcurl 7.34.0 with SSL support
  • Store response cookies without a Domain attribute as host-only cookies
  • Prefer cookie Max-Age over Expires when both attributes are present
  • Match cookie names case-sensitively in CookieJar::getCookieByName()
  • Ignore float-like or exponent Max-Age cookie 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-Length and combinations with Transfer-Encoding
  • Expose raw stream-handler Transfer-Encoding metadata and coalesced framing in progress on newer PHP
  • Wrap malformed redirect Location values in BadResponseException
  • Default HTTPS requests sent by the built-in cURL and stream handlers to TLS 1.2 or newer
  • Apply the stream handler crypto_method option 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 TransferException and 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 as ConnectTimeoutException
  • Classify stream transport failures without a response as NetworkException, with timeouts as NetworkTimeoutException
  • 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 sink option 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-Length casings 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 Protocols before the final response
  • Treat response sink rewind failures as ResponseException and 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\InvalidArgumentException for invalid built-in handler options
  • Classify built-in cURL handle, sink, and HTTP/3 setup failures as RequestException
  • Throw ConnectTimeoutException for connect timeouts
  • Throw NetworkTimeoutException for cURL no-response timeout errors
  • Throw ResponseTimeoutException for response-aware transfer timeouts
  • Enforce the timeout option as a total transfer deadline in the stream handler when it buffers the response
  • Reject stream handler responses whose header block arrives after the timeout deadline
  • Stop consulting the default_socket_timeout ini setting in the stream handler
  • Treat stream handler read_timeout as an idle timeout for every request stage, defaulting to 60 seconds
  • Default the cURL connect timeout to 60 seconds, with connect_timeout set to 0 disabling it
  • Stop the stream handler from injecting User-Agent and From header values from the user_agent and from ini settings
  • Classify request-body stream size detection, read, stringification, and rewind failures as RequestException or ResponseException by phase
  • Classify cURL response sink write failures, including timeouts, as ResponseException or RequestException by phase
  • Treat request method names case-sensitively in built-in handler and redirect method-specific behavior
  • Treat PHP resources passed as sink as caller-owned in the built-in cURL and stream handlers
  • Use the configured PSR-17 URI factory when parsing redirect Location headers
  • Allow built-in cURL handler progress callbacks to abort transfers with truthy return values
  • Normalize built-in handler progress callback arguments to integer byte counts
  • Reject built-in cURL progress throwables with ResponseException when a response exists, otherwise RequestException
  • Release built-in cURL easy handles before invoking on_stats
  • Prefer CURLOPT_XFERINFOFUNCTION for built-in cURL progress callbacks when available
  • Made MessageFormatter final and required Middleware::log() formatters to implement MessageFormatterInterface
  • Made CurlFactory, CurlHandler, CurlMultiHandler, MockHandler, and StreamHandler final
  • Made static utility classes non-instantiable and declared GuzzleHttp\Handler\Proxy final
  • Pass the request to on_trailers callbacks, reject non-callable on_trailers values, and wrap on_trailers callback exceptions in ResponseException
  • Wait for in-progress HTTP/2-capable connections by default (multiplex defaults to Multiplexing::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_PIPEWAIT cURL option at the multiplex request option
  • Reject raw CURLMOPT_PIPELINING in favour of the multiplex cURL multi handler option
  • Reject required multiplexing when the final CURLOPT_HTTPAUTH mask permits NTLM
  • Reject cURL multi options that the runtime libcurl cannot apply
  • Reject unknown handler constructor options
  • Reject invalid select_timeout cURL multi handler option values
  • Reject raw cURL multi connection cap options in favour of the named options
  • Parse Set-Cookie strings with RFC 6265 whitespace trimming
  • Ignore valueless Set-Cookie attributes 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 or request()/requestAsync()
  • Removed ClientInterface::getConfig(); the concrete Client::getConfig() remains available
  • Removed support for the GUZZLE_CURL_SELECT_TIMEOUT environment variable; use CurlMultiHandler's select_timeout option
  • Removed support for the handler request option; configure the handler on the client
  • Removed direct access to CurlMultiHandler::$_mh; pass CURLMOPT_* values through constructor options instead
  • Removed RedirectMiddleware::$defaultSettings; use RedirectMiddleware::DEFAULT_SETTINGS
  • Removed the deprecated RetryMiddleware::exponentialDelay() method
  • Removed the deprecated RequestException::wrapException() method
  • Removed the deprecated Utils::describeType() method
  • Removed Utils::jsonDecode() and Utils::jsonEncode() in favor of native JSON functions
  • Removed deprecated GuzzleHttp namespace functions in favor of native or class equivalents
  • Removed Utils::defaultCaBundle(); rely on the system trust store or pass a bundle path via the verify option
  • Removed HandlerStack::__toString()
  • Removed RequestException::getHandlerContext() and ConnectException::getHandlerContext()
  • Removed response access from RequestException; use ResponseException
  • Removed Utils::isHostInNoProxy(); use ProxyOptions helpers for Guzzle 8 no-proxy matching
  • Removed Utils::isUriInNoProxy(); use ProxyOptions::isUriInNoProxy()
  • Removed Handler\Proxy::wrapTlsFallback(); the default handler stack selects the cURL or stream handler by TLS support automatically
guzzle/psr7 (guzzlehttp/psr7)

v3.0.0

Compare Source

Added
  • Add DiagnosticValue::escape() to escape controls and malformed UTF-8 in diagnostics
  • Add GuzzleHttp\Psr7\Exception\TimeoutException for timed-out stream operations
  • Add GuzzleHttp\Psr7\Utils::redactUserInfoInString() to redact the userinfo of a raw URI string within text
  • Promote GuzzleHttp\Psr7\Rfc3986 to public API with isValid*() predicates and canonicalizeIpv6()
  • Add GuzzleHttp\Psr7\UriNormalizer::CANONICALIZE_IPV6_HOST to PRESERVING_NORMALIZATIONS
Changed
  • Require psr/http-message:^2.0 and add native parameter and return types
  • Require psr/http-factory:^1.1
  • Reject native PHP serialization of stream implementations
  • Preserve request method casing, except ServerRequest::fromGlobals() still uppercases
  • Reject empty arrays and non-string values as header values
  • Reject invalid uploaded file trees and invalid parsed body values
  • Reject uploaded file specs missing tmp_name, size, or error
  • Reject non-integer and negative uploaded file error values
  • Reject invalid stream/upload sizes, buffer high-water marks, and dropping-stream limits
  • Rewind seekable uploaded-file streams before copying in UploadedFile::moveTo()
  • Reject negative read() lengths across all stream implementations
  • Detect the + flag anywhere in a mode for Stream::isReadable()/isWritable()
  • Reject empty strings returned by PumpStream source callables
  • Discard buffered bytes on PumpStream close and detach
  • Restore the original stream position after Message::bodySummary()
  • Allow null for the Message::bodySummary() truncation length to use the default
  • Validate LimitStream offset/limit and track non-seekable offset by bytes skipped
  • Make FnStream close and detach terminal, calling close callbacks at most once
  • Suppress exceptions from FnStream close callbacks during destructor cleanup
  • Make CachingStream::close() idempotent, preserving remote cleanup after detach
  • Do not move the CachingStream cursor when a SEEK_END target on an unknown-size stream is rejected
  • Normalize multiple leading slashes in Uri::getPath() and origin-form request targets
  • Serialize authority-less file URIs with rootless paths without the // separator
  • Serialize authority-less file URIs with empty paths as file: instead of the unparseable file://
  • Remove dot segments above the root per RFC 3986, prefixing authority-less // paths with /.
  • Return a network-path reference from UriResolver::relativize() when an empty-path target requires one
  • Stop returning an empty reference from UriResolver::relativize() when it would inherit the base fragment
  • Stop throwing from UriResolver::relativize() when an equal-path target's last path segment contains a colon
  • Harden URI host validation (delimiters, backslashes, IPv6, embedded ports); require schemes to start with a letter
  • Validate Uri::fromParts() ports instead of casting them
  • Treat ports 80 and 443 as defaults for the ws and wss schemes
  • Use the ws and wss default ports in UriComparator::isCrossOrigin() port comparisons
  • Redact all non-empty URI userinfo in Utils::redactUserInfo()
  • Rebuild server request URIs from $_SERVER by REQUEST_METHOD, using target authority before SERVER_PORT
  • Remove userinfo from absolute-form REQUEST_URI targets in ServerRequest::fromGlobals()
  • Reject zero-port HTTP_HOST and malformed SERVER_PORT in ServerRequest::getUriFromGlobals()
  • Reject malformed REQUEST_METHOD and SERVER_PROTOCOL server values in ServerRequest::fromGlobals()
  • Reject zero-port Host and normalize leading-zero ports in Message::parseRequest()
  • Reject duplicate Host headers and validate present values for all request-target forms
  • Reject zero-port, hostless, and userinfo absolute-form request targets in Message::parseRequest()
  • Synchronize the Host header in Request::withUri() when the URI changes or Host is empty
  • Include the URI port in Host headers synthesized by Message::toString()
  • Validate the Host header synthesized by Message::toString() from the request URI
  • Include non-default URI ports in Host headers set by Utils::modifyRequest() URI changes
  • Accept OPTIONS * and CONNECT authority-form request targets in Message::parseRequest()
  • Hide credential-bearing URI, server, and cookie arguments in stack traces on PHP 8.2+
  • Reject malformed HTTP request/response start-lines
  • Unfold obsolete HTTP/1.0 line folding for all valid request method tokens
  • Reject empty and control-character request targets in Request::withRequestTarget()
  • Validate iterator chunks passed to Utils::streamFor()
  • Validate unsupported values passed to Query::build()
  • Reject non-finite float values in Query::build() and MultipartStream contents
  • Reject non-finite float values in iterator chunks passed to Utils::streamFor()
  • Utils::streamFor() now rejects non-string scalar bodies
  • Uri::withQueryValues() now rejects non-string values
  • Reject invalid Utils::modifyRequest() change values
  • Use PHP debug type names in type error messages
  • Changed Utils::copyToStream() to throw when destination streams cannot make progress
  • Throw TimeoutException from Stream read/write and Utils copy/hash/readLine on stream timeouts
  • Throw TimeoutException from AppendStream::read(), CachingStream::read(), and Utils::tryGetContents() on stream timeouts
  • Re-throw TimeoutException from InflateStream when the decoded source stream times out
  • Close the compressed source stream from InflateStream::close()
  • Return the number of bytes copied from Utils::copyToStream()
  • Throw OverflowException when stream byte counts or offsets exceed PHP_INT_MAX
  • Translate StreamWrapper runtime failures to PHP stream failure values
  • Stop adding default Content-Length to multipart/form-data parts (RFC 7578 §4.8)
  • Escape multipart Content-Disposition parameters and reject unsafe boundaries and part headers
  • Preserve trailing whitespace in custom MultipartStream part header values
  • Preserve explicit custom MultipartStream boundary '0' instead of replacing it with a generated boundary
  • Made static utility classes non-instantiable
  • Validate bracketed IP-literal hosts consistently between parsing and withHost(), including userinfo forms
  • Percent-encode raw control bytes in userinfo before bracketed IP-literal hosts instead of parsing mutated values
  • Reject invalid UTF-8 and preserve percent-sequences in userinfo before bracketed IP-literal hosts
  • Normalize percent-encoded octets in the URI host to uppercase hex
  • Canonicalize IPv6 hosts to RFC 5952 form in Uri construction, fromParts(), and withHost()
  • Canonicalize bracketed IPv6 hosts in UriComparator::isCrossOrigin()
  • Reject malformed percent-sequences and percent-encoded bytes forbidden by the URI host policy
  • Extend CAPITALIZE_PERCENT_ENCODING and DECODE_UNRESERVED_CHARACTERS to userinfo and host
  • Trim header list elements with only spaces, horizontal tabs, and line terminators in Header::splitList()
  • Report header parameter PCRE failures explicitly in Header::parse()
  • Escape controls and malformed UTF-8 consistently in generated exception messages
Removed
  • Dropped support for PHP 7.2 and 7.3
  • Removed the ralouphie/getallheaders dependency
  • Removed deprecated Header::normalize() method

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • Monday through Friday (* * * * 1-5)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

| datasource | package           | from   | to    |
| ---------- | ----------------- | ------ | ----- |
| packagist  | guzzlehttp/guzzle | 7.15.2 | 8.0.1 |
| packagist  | guzzlehttp/psr7   | 2.13.0 | 3.0.0 |
@renovate renovate Bot added the dependencies Updates project dependencies label Jul 28, 2026
@eliashaeussler
eliashaeussler enabled auto-merge July 28, 2026 06:15
@eliashaeussler
eliashaeussler merged commit 2703222 into main Jul 28, 2026
11 checks passed
@eliashaeussler
eliashaeussler deleted the renovate/major-guzzle branch July 28, 2026 06:16
@coveralls

Copy link
Copy Markdown
Collaborator

Coverage Report for CI Build 30334206667

Coverage remained the same at 97.619%

Details

  • Coverage remained the same as the base build.
  • Patch coverage: 1 of 1 lines across 1 file are fully covered (100%).
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 168
Covered Lines: 164
Line Coverage: 97.62%
Coverage Strength: 2.35 hits per line

💛 - Coveralls

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Updates project dependencies

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants