/**
  * @param $url
  * @param callable|null $callback
  * @param RequestHandler|null $requestHandler
  * @return Response
  */
 private function makeRequest($url, callable $callback = null, RequestHandler $requestHandler = null)
 {
     $response = new Response();
     $ch = $response->getCurlHandle();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_USERPWD, "{$this->username}:{$this->passwd}");
     curl_setopt($ch, CURLOPT_HEADER, 1);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $str) use($response) {
         $response->writeData($str);
         return strlen($str);
     });
     if (is_callable($callback)) {
         call_user_func($callback, $ch);
     }
     if ($requestHandler instanceof RequestHandler) {
         $requestHandler->handle($ch);
     }
     $response->waitForHeader();
     return $response;
 }