/** * @param Request $request * @param CurlWrapper $curl * @param string $requestId * @param integer $cycles * @throws BadStatusException * @throws FailedRequestException * @return Response */ protected function finishRequest(Request $request, CurlWrapper $curl, $requestId, $cycles) { // request failed if (!$curl->response) { throw new FailedRequestException($curl, $this->queriedRequest); } // build & check response $response = $this->buildResponse($curl); if (($statusCode = $response->headers['Status-Code']) >= 400 && $statusCode < 600) { throw new BadStatusException($response->headers['Status'], $request, $response); } // force redirect on Location header if ($this->isForcingFollowRedirect($curl, $response)) { $request = $this->queriedRequest->followRedirect($response); $response = $this->sendRequest($request, ++$cycles)->setPrevious($response); // override } // log response if ($this->logger && isset($requestId)) { $this->logger->response($response, $requestId); } // return return $response; }