1111
1212namespace Symfony \Component \HttpClient ;
1313
14+ use Amp \Http \Client \Connection \ConnectionLimitingPool ;
1415use Symfony \Contracts \HttpClient \HttpClientInterface ;
1516
1617/**
@@ -29,6 +30,25 @@ final class HttpClient
2930 */
3031 public static function create (array $ defaultOptions = [], int $ maxHostConnections = 6 , int $ maxPendingPushes = 50 ): HttpClientInterface
3132 {
33+ if ($ amp = class_exists (ConnectionLimitingPool::class)) {
34+ if (!\extension_loaded ('curl ' )) {
35+ return new AmpHttpClient ($ defaultOptions , null , $ maxHostConnections , $ maxPendingPushes );
36+ }
37+
38+ // Skip curl when HTTP/2 push is unsupported or buggy, see https://bugs.php.net/77535
39+ if (\PHP_VERSION_ID < 70217 || (\PHP_VERSION_ID >= 70300 && \PHP_VERSION_ID < 70304 ) || !\defined ('CURLMOPT_PUSHFUNCTION ' )) {
40+ return new AmpHttpClient ($ defaultOptions , null , $ maxHostConnections , $ maxPendingPushes );
41+ }
42+
43+ static $ curlVersion = null ;
44+ $ curlVersion = $ curlVersion ?? curl_version ();
45+
46+ // HTTP/2 push crashes before curl 7.61
47+ if (0x073d00 > $ curlVersion ['version_number ' ] || !(CURL_VERSION_HTTP2 & $ curlVersion ['features ' ])) {
48+ return new AmpHttpClient ($ defaultOptions , null , $ maxHostConnections , $ maxPendingPushes );
49+ }
50+ }
51+
3252 if (\extension_loaded ('curl ' )) {
3353 if ('\\' !== \DIRECTORY_SEPARATOR || ini_get ('curl.cainfo ' ) || ini_get ('openssl.cafile ' ) || ini_get ('openssl.capath ' )) {
3454 return new CurlHttpClient ($ defaultOptions , $ maxHostConnections , $ maxPendingPushes );
@@ -37,6 +57,10 @@ public static function create(array $defaultOptions = [], int $maxHostConnection
3757 @trigger_error ('Configure the "curl.cainfo", "openssl.cafile" or "openssl.capath" php.ini setting to enable the CurlHttpClient ' , E_USER_WARNING );
3858 }
3959
60+ if ($ amp ) {
61+ return new AmpHttpClient ($ defaultOptions , null , $ maxHostConnections , $ maxPendingPushes );
62+ }
63+
4064 return new NativeHttpClient ($ defaultOptions , $ maxHostConnections );
4165 }
4266
0 commit comments