Esempio n. 1
0
 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);
     }
 }