88
99final class HttpClient
1010{
11+ /**
12+ * @var \CurlShareHandle|resource|null
13+ */
14+ private $ shareHandle = null ;
15+
1116 /**
1217 * @param non-empty-array<non-empty-string> $urls
1318 * @param list<string> $headers
@@ -16,15 +21,19 @@ final class HttpClient
1621 */
1722 public function getMulti (array $ urls , array $ headers ): array
1823 {
19- if (function_exists ('curl_share_init_persistent ' )) {
20- $ share = curl_share_init_persistent ([
21- CURL_LOCK_DATA_DNS ,
22- CURL_LOCK_DATA_CONNECT ,
23- ]);
24- } else {
25- $ share = curl_share_init ();
26- curl_share_setopt ($ share , CURLSHOPT_SHARE , CURL_LOCK_DATA_DNS );
27- curl_share_setopt ($ share , CURLSHOPT_SHARE , CURL_LOCK_DATA_CONNECT );
24+ if ($ this ->shareHandle === null ) {
25+ if (function_exists ('curl_share_init_persistent ' )) {
26+ $ this ->shareHandle = curl_share_init_persistent ([
27+ CURL_LOCK_DATA_DNS ,
28+ CURL_LOCK_DATA_CONNECT ,
29+ CURL_LOCK_DATA_SSL_SESSION
30+ ]);
31+ } else {
32+ $ this ->shareHandle = curl_share_init ();
33+ curl_share_setopt ($ this ->shareHandle , CURLSHOPT_SHARE , CURL_LOCK_DATA_DNS );
34+ curl_share_setopt ($ this ->shareHandle , CURLSHOPT_SHARE , CURL_LOCK_DATA_CONNECT );
35+ curl_share_setopt ($ this ->shareHandle , CURLSHOPT_SHARE , CURL_LOCK_DATA_SSL_SESSION );
36+ }
2837 }
2938
3039 $ mh = curl_multi_init ();
@@ -37,7 +46,7 @@ public function getMulti(array $urls, array $headers): array
3746 throw new RuntimeException ('Could not initialize cURL connection ' );
3847 }
3948
40- curl_setopt ($ curl , CURLOPT_SHARE , $ share );
49+ curl_setopt ($ curl , CURLOPT_SHARE , $ this -> shareHandle );
4150
4251 // see https://stackoverflow.com/a/27776164/1597388
4352 curl_setopt ($ curl , CURLOPT_CONNECTTIMEOUT , 3 );
0 commit comments