Update a request based on the log messages of the CurlHandle
RequestInterface $request Request to update:
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']);
}
}
}