public function CurlHandle::updateRequestFromTransfer

Update a request based on the log messages of the CurlHandle

Parameters

RequestInterface $request Request to update:

File

drupal/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlHandle.php, line 400

Class

CurlHandle
Immutable wrapper for a cURL handle

Namespace

Guzzle\Http\Curl

Code

public function updateRequestFromTransfer(RequestInterface $request) {
  if (!$request
    ->getResponse()) {
    return;
  }

  // Update the transfer stats of the response
  $request
    ->getResponse()
    ->setInfo($this
    ->getInfo());
  if (!($log = $this
    ->getStderr(true))) {
    return;
  }

  // Parse the cURL stderr output for outgoing requests
  $headers = '';
  fseek($log, 0);
  while (($line = fgets($log)) !== false) {
    if ($line && $line[0] == '>') {
      $headers = substr(trim($line), 2) . "\r\n";
      while (($line = fgets($log)) !== false) {
        if ($line[0] == '*' || $line[0] == '<') {
          break;
        }
        else {
          $headers .= trim($line) . "\r\n";
        }
      }
    }
  }

  // Add request headers to the request exactly as they were sent
  if ($headers) {
    $parsed = ParserRegistry::getInstance()
      ->getParser('message')
      ->parseRequest($headers);
    if (!empty($parsed['headers'])) {
      $request
        ->setHeaders(array());
      foreach ($parsed['headers'] as $name => $value) {
        $request
          ->setHeader($name, $value);
      }
    }
    if (!empty($parsed['version'])) {
      $request
        ->setProtocolVersion($parsed['version']);
    }
  }
}