---
title: "Feature: #70056 - Added PHP library \"Guzzle\" for HTTP Requests within TYPO3"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:feature-70056"
source: "Changelog/8.1/Feature-70056-GuzzleForHttpRequests.rst"
modified: "2026-09-14T09:47:36+00:00"
---

# Feature: #70056 - Added PHP library "Guzzle" for HTTP Requests within TYPO3

See [forge#70056](https://forge.typo3.org/issues/70056)

## Description

The PHP library `Guzzle` has been added via composer dependency to work as a feature rich solution for creating HTTP requests
based on the PSR-7 interfaces already used within TYPO3.

Guzzle auto-detects available underlying adapters available on the system, like cURL or stream wrappers and chooses
the best solution for the system.

A TYPO3-specific PHP class called `TYPO3CMSCoreHttpRequestFactory` has been added as a simplified wrapper to access
Guzzle clients.

All options available under `$TYPO3_CONF_VARS[HTTP]` are automatically applied to the Guzzle clients when using the
`RequestFactory` class. The options are a subset to the available options on Guzzle ([http://docs.guzzlephp.org/en/latest/request-options.html](http://docs.guzzlephp.org/en/latest/request-options.html))
but can further be extended.

Existing `$TYPO3_CONF_VARS[HTTP]` options have been removed and/or migrated to the new Guzzle-compliant options.

A full documentation for Guzzle can be found at [http://docs.guzzlephp.org/en/latest/](http://docs.guzzlephp.org/en/latest/).

Although Guzzle can handle Promises/A+ and asynchronous requests, it currently acts as a drop-in replacement for the
previous mixed options and implementations within `GeneralUtility::getUrl()` and a PSR-7-based API for HTTP
requests.

## Impact

The existing TYPO3-specific wrapper `GeneralUtility::getUrl()` now uses Guzzle under the hood automatically for remote
files, removing the need to configure settings based on certain implementations like stream wrappers or cURL directly.

The `RequestFactory` class can be used like this:

```php
// Initiate the Request Factory, which allows to run multiple requests
/** @var \TYPO3\CMS\Core\Http\RequestFactory $requestFactory */
$requestFactory = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Http\RequestFactory\RequestFactory::class);
$url = 'https://typo3.com';
$additionalOptions = [
   // Additional headers for this specific request
   'headers' => ['Cache-Control' => 'no-cache'],
   // Additional options, see http://docs.guzzlephp.org/en/latest/request-options.html
   'allow_redirects' => false,
   'cookies' => true
];
// Return a PSR-7 compliant response object
$response = $requestFactory->request($url, 'GET', $additionalOptions);
// Get the content as a string on a successful request
if ($response->getStatusCode() === 200) {
   if ($response->getHeader('Content-Type') === 'text/html') {
      $content = $response->getBody()->getContents();
   }
}
```

Extension authors are advised to use the `RequestFactory` class instead of using the Guzzle API directly in order to ensure
a clear upgrade path when updates to the underlying API need to be done.
