Skip to content

Commit fc3acf3

Browse files
Merge branch '4.4' into 5.0
* 4.4: [Config] improve perf of glob discovery when GLOB_BRACE is not available use utf8mb4_bin to align code with documentation [HttpClient] make pushed responses retry-able [VarDumper] ignore failing __debugInfo()
2 parents 4c052cb + e23449c commit fc3acf3

File tree

2 files changed

+26
-21
lines changed

2 files changed

+26
-21
lines changed

CurlHttpClient.php

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -119,23 +119,6 @@ public function request(string $method, string $url, array $options = []): Respo
119119
$options['normalized_headers']['user-agent'][] = $options['headers'][] = 'User-Agent: Symfony HttpClient/Curl';
120120
}
121121

122-
if ($pushedResponse = $this->multi->pushedResponses[$url] ?? null) {
123-
unset($this->multi->pushedResponses[$url]);
124-
125-
if (self::acceptPushForRequest($method, $options, $pushedResponse)) {
126-
$this->logger && $this->logger->debug(sprintf('Accepting pushed response: "%s %s"', $method, $url));
127-
128-
// Reinitialize the pushed response with request's options
129-
$pushedResponse->response->__construct($this->multi, $url, $options, $this->logger);
130-
131-
return $pushedResponse->response;
132-
}
133-
134-
$this->logger && $this->logger->debug(sprintf('Rejecting pushed response: "%s".', $url));
135-
}
136-
137-
$this->logger && $this->logger->info(sprintf('Request: "%s %s"', $method, $url));
138-
139122
$curlopts = [
140123
CURLOPT_URL => $url,
141124
CURLOPT_TCP_NODELAY => true,
@@ -294,7 +277,26 @@ public function request(string $method, string $url, array $options = []): Respo
294277
$curlopts[CURLOPT_TIMEOUT_MS] = 1000 * $options['max_duration'];
295278
}
296279

297-
$ch = curl_init();
280+
if ($pushedResponse = $this->multi->pushedResponses[$url] ?? null) {
281+
unset($this->multi->pushedResponses[$url]);
282+
283+
if (self::acceptPushForRequest($method, $options, $pushedResponse)) {
284+
$this->logger && $this->logger->debug(sprintf('Accepting pushed response: "%s %s"', $method, $url));
285+
286+
// Reinitialize the pushed response with request's options
287+
$ch = $pushedResponse->handle;
288+
$pushedResponse = $pushedResponse->response;
289+
$pushedResponse->__construct($this->multi, $url, $options, $this->logger);
290+
} else {
291+
$this->logger && $this->logger->debug(sprintf('Rejecting pushed response: "%s".', $url));
292+
$pushedResponse = null;
293+
}
294+
}
295+
296+
if (!$pushedResponse) {
297+
$ch = curl_init();
298+
$this->logger && $this->logger->info(sprintf('Request: "%s %s"', $method, $url));
299+
}
298300

299301
foreach ($curlopts as $opt => $value) {
300302
if (null !== $value && !curl_setopt($ch, $opt, $value) && CURLOPT_CERTINFO !== $opt) {
@@ -306,7 +308,7 @@ public function request(string $method, string $url, array $options = []): Respo
306308
}
307309
}
308310

309-
return new CurlResponse($this->multi, $ch, $options, $this->logger, $method, self::createRedirectResolver($options, $host));
311+
return $pushedResponse ?? new CurlResponse($this->multi, $ch, $options, $this->logger, $method, self::createRedirectResolver($options, $host));
310312
}
311313

312314
/**
@@ -396,7 +398,7 @@ private static function handlePush($parent, $pushed, array $requestHeaders, Curl
396398
$url .= $headers[':path'][0];
397399
$logger && $logger->debug(sprintf('Queueing pushed response: "%s"', $url));
398400

399-
$multi->pushedResponses[$url] = new PushedResponse(new CurlResponse($multi, $pushed), $headers, $multi->openHandles[(int) $parent][1] ?? []);
401+
$multi->pushedResponses[$url] = new PushedResponse(new CurlResponse($multi, $pushed), $headers, $multi->openHandles[(int) $parent][1] ?? [], $pushed);
400402

401403
return CURL_PUSH_OK;
402404
}

Internal/PushedResponse.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,13 @@ final class PushedResponse
2929

3030
public $parentOptions = [];
3131

32-
public function __construct(CurlResponse $response, array $requestHeaders, array $parentOptions)
32+
public $handle;
33+
34+
public function __construct(CurlResponse $response, array $requestHeaders, array $parentOptions, $handle)
3335
{
3436
$this->response = $response;
3537
$this->requestHeaders = $requestHeaders;
3638
$this->parentOptions = $parentOptions;
39+
$this->handle = $handle;
3740
}
3841
}

0 commit comments

Comments
 (0)