/**
  * @param  Request  $request
  * @return Response
  */
 public function request(Request $request)
 {
     $guzzleRequest = $this->prepareRequest($request);
     /** @var GuzzleResponse $guzzleResponse */
     $guzzleResponse = $this->client->send($guzzleRequest);
     return new Response($guzzleResponse->getProtocolVersion(), (int) $guzzleResponse->getStatusCode(), $guzzleResponse->getReasonPhrase(), HeaderConverter::convertComplexAssociativeToFlatAssociative($guzzleResponse->getHeaders()), (string) $guzzleResponse->getBody());
 }
 /**
  * @param  Request     $request
  * @return BuzzRequest
  */
 protected function prepareRequest(Request $request)
 {
     $buzzRequest = new BuzzRequest($request->getMethod(), $request->getUrl()->getResource(), $request->getUrl()->getHost());
     $buzzRequest->setProtocolVersion($request->getProtocolVersion());
     $buzzRequest->setHeaders(HeaderConverter::convertAssociativeToRaw($this->prepareHeaders($request)));
     $buzzRequest->setContent($request->getContent());
     return $buzzRequest;
 }
 /**
  * @param  Request  $request
  * @return Response
  */
 public function request(Request $request)
 {
     $method = strtolower($request->getMethod());
     $headers = HeaderConverter::convertAssociativeToRaw($this->prepareHeaders($request));
     /** @var VinelabResponse $vinelabResponse */
     $vinelabResponse = $this->client->{$method}(array('version' => $request->getProtocolVersion(), 'url' => (string) $request->getUrl(), 'headers' => $headers, 'content' => $request->getContent()));
     return new Response($request->getProtocolVersion(), $vinelabResponse->statusCode(), $this->getStatusMessage($vinelabResponse->statusCode()), $vinelabResponse->headers(), $vinelabResponse->content());
 }
 /**
  * @param array $complexAssociativeHeaders
  * @param array $expected
  * @dataProvider convertComplexAssociativeToFlatAssociativeProvider
  */
 public function testConvertComplexAssociativeToFlatAssociative(array $complexAssociativeHeaders, array $expected)
 {
     $actual = HeaderConverter::convertComplexAssociativeToFlatAssociative($complexAssociativeHeaders);
     $this->assertEquals($expected, $actual);
 }