public function sendRequest(HttpRequest $request, ExecutionContext $context) { $response = new HttpResponse($request); try { $coreRequest = $this->buildCoreRequest($request); $coreResponse = $coreRequest->send(); $coreResponse->getBody()->rewind(); $response->setStatusCode($coreResponse->getStatusCode()); $response->setUri($coreRequest->getUrl()); $response->setContent($coreResponse->getBody()->getStream()); // Replace resource of Guzzle Stream to forbidden resource close when Stream is released. $fakedResource = fopen('php://memory', 'r+'); if ($coreResponse->getBody() !== null) { $coreResponse->getBody()->setStream($fakedResource); } // If request has entity, replace resource of Guzzle Stream to forbidden resource close when Stream is released. if ($coreRequest instanceof EntityEnclosingRequest && $coreRequest->getBody() !== null) { $coreRequest->getBody()->setStream($fakedResource); } fclose($fakedResource); for ($iter = $coreResponse->getHeaders()->getIterator(); $iter->valid(); $iter->next()) { $header = $iter->current(); $response->addHeader($header->getName(), (string) $header); } $request->setResponse($response); return $response; } catch (\Exception $e) { $response->close(); throw new ClientException($e->getMessage(), $e); } }