13 use Psr\Http\Message\RequestFactoryInterface as Psr17RequestFactory;
24 use Zend\Diactoros\Request as DiactorosRequest;
28 use Slim\Http\Request as SlimRequest;
30 use Http\Adapter\Guzzle5\Client as Guzzle5;
31 use Http\Client\Curl\Client as Curl;
32 use Http\Client\Socket\Client as Socket;
33 use Http\Adapter\React\Client as React;
34 use Http\Adapter\Buzz\Client as Buzz;
35 use Http\Adapter\Cake\Client as Cake;
36 use Http\Adapter\Zend\Client as Zend;
37 use Http\Adapter\Artax\Client as Artax;
38 use Symfony\Component\HttpClient\HttplugClient as SymfonyHttplug;
39 use Symfony\Component\HttpClient\Psr18Client as SymfonyPsr18;
40 use Nyholm\Psr7\Factory\HttplugFactory as NyholmHttplugFactory;
52 private static $classes = [
53 MessageFactory::class => [
54 [
'class' => NyholmHttplugFactory::class,
'condition' => [NyholmHttplugFactory::class]],
55 [
'class' => GuzzleMessageFactory::class,
'condition' => [GuzzleRequest::class, GuzzleMessageFactory::class]],
56 [
'class' => DiactorosMessageFactory::class,
'condition' => [DiactorosRequest::class, DiactorosMessageFactory::class]],
57 [
'class' => SlimMessageFactory::class,
'condition' => [SlimRequest::class, SlimMessageFactory::class]],
59 StreamFactory::class => [
60 [
'class' => NyholmHttplugFactory::class,
'condition' => [NyholmHttplugFactory::class]],
61 [
'class' => GuzzleStreamFactory::class,
'condition' => [GuzzleRequest::class, GuzzleStreamFactory::class]],
62 [
'class' => DiactorosStreamFactory::class,
'condition' => [DiactorosRequest::class, DiactorosStreamFactory::class]],
63 [
'class' => SlimStreamFactory::class,
'condition' => [SlimRequest::class, SlimStreamFactory::class]],
65 UriFactory::class => [
66 [
'class' => NyholmHttplugFactory::class,
'condition' => [NyholmHttplugFactory::class]],
67 [
'class' => GuzzleUriFactory::class,
'condition' => [GuzzleRequest::class, GuzzleUriFactory::class]],
68 [
'class' => DiactorosUriFactory::class,
'condition' => [DiactorosRequest::class, DiactorosUriFactory::class]],
69 [
'class' => SlimUriFactory::class,
'condition' => [SlimRequest::class, SlimUriFactory::class]],
71 HttpAsyncClient::class => [
72 [
'class' => SymfonyHttplug::class,
'condition' => [SymfonyHttplug::class, Promise::class, RequestFactory::class, [self::class,
'isPsr17FactoryInstalled']]],
73 [
'class' => Guzzle6::class,
'condition' => Guzzle6::class],
74 [
'class' => Curl::class,
'condition' => Curl::class],
75 [
'class' => React::class,
'condition' => React::class],
77 HttpClient::class => [
78 [
'class' => SymfonyHttplug::class,
'condition' => [SymfonyHttplug::class, RequestFactory::class, [self::class,
'isPsr17FactoryInstalled']]],
79 [
'class' => Guzzle6::class,
'condition' => Guzzle6::class],
80 [
'class' => Guzzle5::class,
'condition' => Guzzle5::class],
81 [
'class' => Curl::class,
'condition' => Curl::class],
82 [
'class' => Socket::class,
'condition' => Socket::class],
83 [
'class' => Buzz::class,
'condition' => Buzz::class],
84 [
'class' => React::class,
'condition' => React::class],
85 [
'class' => Cake::class,
'condition' => Cake::class],
86 [
'class' => Zend::class,
'condition' => Zend::class],
87 [
'class' => Artax::class,
'condition' => Artax::class],
89 'class' => [self::class,
'buzzInstantiate'],
90 'condition' => [\Buzz\Client\FileGetContents::class, \Buzz\Message\ResponseBuilder::class],
93 Psr18Client::class => [
95 'class' => [self::class,
'symfonyPsr18Instantiate'],
96 'condition' => [SymfonyPsr18::class, Psr17RequestFactory::class],
99 'class' => [self::class,
'buzzInstantiate'],
100 'condition' => [\Buzz\Client\FileGetContents::class, \Buzz\Message\ResponseBuilder::class],
110 if (Psr18Client::class === $type) {
111 $candidates = self::$classes[PSR18Client::class];
114 foreach (self::$classes[HttpClient::class] as $c) {
115 if (is_subclass_of($c[
'class'], Psr18Client::class)) {
123 if (isset(self::$classes[$type])) {
124 return self::$classes[$type];
151 }
catch (\Throwable $e) {
152 trigger_error(sprintf(
'Got exception "%s (%s)" while checking if a PSR-17 ResponseFactory is available', get_class($e), $e->getMessage()), E_USER_WARNING);