/**
  * Instantiates the HttpRequest depending on the
  * configuration from the given Request.
  * @param $request    Request    The Request configuration.
  * @return RequestInterface  The HTTP request.
  */
 private function createHttpRequest(Request $request)
 {
     // The URL
     $url = ltrim(trim($request->getUrl()), '/');
     // Handle templated URLs
     if ($urlVariables = $request->getUrlVariables()) {
         $url = (new UriTemplate())->expand($url, $urlVariables);
     }
     // Create the request (we will handle the exceptions)
     $httpRequest = $this->client->createRequest($request->getMethod(), $url, array('exceptions' => false));
     // The message body
     if ($messageBody = $request->getMessageBody()) {
         $httpRequest->setHeader('Content-Type', $messageBody->getContentType());
         if (!is_a($messageBody, 'Finix\\Http\\MultipartBody')) {
             $httpRequest->setHeader('Content-Length', $messageBody->getContentLength());
             $httpRequest->setBody(Stream::factory($messageBody->getContent()));
         } else {
             /** @var \Finix\Http\MultipartBody $messageBody */
             $httpRequest->getBody()->addFile($messageBody->getContent());
         }
     }
     // Accept hal+json response
     if ($this->profile) {
         $accept = 'application/hal+json; profile="' . $this->profile . '"';
     } else {
         $accept = 'application/json';
     }
     //$httpRequest->setHeader('Accept', $accept);
     // Additional headers if specified
     foreach ($request->getHeaders() as $key => $value) {
         $httpRequest->setHeader($key, $value);
     }
     // "verify" the request if needed
     $this->verify($httpRequest);
     return $httpRequest;
 }