public function send(Request $request) { $response = new Response($request->getDataFormat()); $curl = new Curl(); foreach ($request->headers as $header => $value) { $curl->setHeader($header, $value); } // Bind success callback. $curl->error(function ($curl) { dd($curl); }); // Bind success callback. $curl->success(function ($curl) use(&$response) { $response->code = $curl->http_status_code; // Todo: convert string to document object. $response->document = $response->getDataFormat()->deserialize($curl->raw_response); }); // Send the request. switch ($request->method) { case 'GET': $curl->get($request->url); break; case 'POST': $contentString = $request->getDataFormat()->serialize($request->document)->getContent(); $curl->post($request->url, $contentString); break; } return $response; }