bug #32083 [HttpClient] fixing passing debug info to progress callback (nicolas-grekas)

This PR was merged into the 4.3 branch.

Discussion
----------

[HttpClient] fixing passing debug info to progress callback

| Q             | A
| ------------- | ---
| Branch?       | 4.3
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

NativeHttpClient already has it.

Commits
-------

dc55cf826a [HttpClient] fixing passing debug info to progress callback
This commit is contained in:
Nicolas Grekas 2019-06-23 17:19:50 +02:00
commit b56591c92d
2 changed files with 8 additions and 16 deletions

View File

@ -55,6 +55,7 @@ final class CurlResponse implements ResponseInterface
$this->info['start_time'] = $this->info['start_time'] ?? microtime(true);
$info = &$this->info;
$headers = &$this->headers;
$debugBuffer = $this->debugBuffer;
if (!$info['response_headers']) {
// Used to keep track of what we're waiting for
@ -88,9 +89,11 @@ final class CurlResponse implements ResponseInterface
if ($onProgress = $options['on_progress']) {
$url = isset($info['url']) ? ['url' => $info['url']] : [];
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, static function ($ch, $dlSize, $dlNow) use ($onProgress, &$info, $url, $multi) {
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, static function ($ch, $dlSize, $dlNow) use ($onProgress, &$info, $url, $multi, $debugBuffer) {
try {
$onProgress($dlNow, $dlSize, $url + curl_getinfo($ch) + $info);
rewind($debugBuffer);
$debug = ['debug' => stream_get_contents($debugBuffer)];
$onProgress($dlNow, $dlSize, $url + curl_getinfo($ch) + $info + $debug);
} catch (\Throwable $e) {
$multi->handlesActivity[(int) $ch][] = null;
$multi->handlesActivity[(int) $ch][] = $e;
@ -148,12 +151,6 @@ final class CurlResponse implements ResponseInterface
if (!$info = $this->finalInfo) {
self::perform($this->multi);
if ('debug' === $type) {
rewind($this->debugBuffer);
return stream_get_contents($this->debugBuffer);
}
$info = array_merge($this->info, curl_getinfo($this->handle));
$info['url'] = $this->info['url'] ?? $info['url'];
$info['redirect_url'] = $this->info['redirect_url'] ?? null;
@ -164,9 +161,10 @@ final class CurlResponse implements ResponseInterface
$info['starttransfer_time'] = 0.0;
}
rewind($this->debugBuffer);
$info['debug'] = stream_get_contents($this->debugBuffer);
if (!\in_array(curl_getinfo($this->handle, CURLINFO_PRIVATE), ['headers', 'content'], true)) {
rewind($this->debugBuffer);
$info['debug'] = stream_get_contents($this->debugBuffer);
curl_setopt($this->handle, CURLOPT_VERBOSE, false);
rewind($this->debugBuffer);
ftruncate($this->debugBuffer, 0);

View File

@ -78,18 +78,12 @@ final class NativeResponse implements ResponseInterface
if (!$info = $this->finalInfo) {
self::perform($this->multi);
if ('debug' === $type) {
return $this->info['debug'];
}
$info = $this->info;
$info['url'] = implode('', $info['url']);
unset($info['fopen_time'], $info['size_body'], $info['request_header']);
if (null === $this->buffer) {
$this->finalInfo = $info;
} else {
unset($info['debug']);
}
}