Компонент Symfony HttpClient был представлен в Symfony 4.3 как низкоуровневый HTTP-клиент с поддержкой как потоковых оболочек PHP, так и cURL. В Symfony 4.4 улучшили его с помощью множества новых функций.
В PR #31641 сделали $response->getInfo('debug')
, чтобы возвращать расширенные журналы о транзакции HTTP, чтобы вам было легче отлаживать проблемы.
Пример сгенерированного журнала:
* Found bundle for host http2-push.io: 0x56193881ae40 [can multiplex]\n * Connected to http2-push.io (216.239.38.21) port 443 (#0)\n > GET /css/style.css HTTP/2\r\n Host: http2-push.io\r\n User-Agent: Symfony HttpClient/Curl\r\n Accept-Encoding: deflate, gzip\r\n \r\n < HTTP/2 200 \r\n < content-type: text/css\r\n < content-encoding: gzip\r\n < content-length: 1805\r\n < etag: "0CqJow"\r\n < \r\n
В PR #31831 добавили новый метод cancel()
, чтобы вы могли отменить ответы в любой момент.
В PR #31976 и PR #32104 улучшили интеграцию компонента с HTTPlug, еще одной популярной библиотекой для выполнения HTTP-запросов. Компонент Symfony HttpClient теперь совместим с тремя различными абстракциями для клиентов HTTP: Symfony Contracts, PSR-18 и HTTPlug v1 и v2.
В PR #32231 добавили поддержку аутентификации NTLM:
$client = HttpClient::create([
'auth_ntlm' => 'username:password',
// ...
]);
В PR #32290 добавили новый метод toStream()
для приведения ответов к обычным потокам PHP:
$response = $client->request('GET', 'https://...');
$content = $response->toStream();
// alternatively, you can use this code:
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\HttpClient\Response\StreamWrapper;
$client = HttpClient::create();
$response = $client->request('GET', 'https://...');
$streamResource = StreamWrapper::createResource($response, $client)
В PR #32565 улучшили опцию конфигурации буфера. В предыдущих версиях Symfony это был логический вариант. В Symfony 4.4 вы также можете передать закрытие PHP (которое должно возвращать логическое значение), чтобы включить условную буферизацию:
$response = $client->request('GET', 'https://...', [
'buffer' => function (array $headers): bool {
// some logic here to decide if we want to buffer or not
return true; // or return false;
},
]);
В PR #34216 улучшили опцию конфигурации json. В предыдущих версиях Symfony эта опция позволяла передавать только массивы или объекты, реализующие JsonSerializable
. В Symfony 4.4 вы можете передать любое значение, которое можно передать в json_encode()
, которое включает в себя скалярные значения и классы с открытыми свойствами:
class Book
{
public $title = '...';
public $author = '...';
// ...
}
$response = $client->request('PUT', 'https://...', [
'json' => $book,
]);
В PR #32807 добавили новую опцию конфигурации max_duration
, чтобы определить максимальное время выполнения, разрешенное для всего процесса запрос + ответ. Установите 0, чтобы не определять ограничение по времени:
$response = $client->request('GET', 'https://...', [
'max_duration' => 21.7,
]);