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) but can
further be extended.
Existing \$TYPO3_CONF_VARS[HTTP]
options have been removed and/or migrated to the new Guzzle-compliant
options.
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:
// 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.
Feature: #70056 - Added PHP library "Guzzle" for HTTP Requests within TYPO3
https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/8.1/Feature-70056-GuzzleForHttpRequests.html
Feature: #70056 - Added PHP library "Guzzle" for HTTP Requests within TYPO3
See 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) 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/.
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:
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.