* @param array $defaultHeaders * @param string|array|object $requestBody * @return CurlPlusResponse */ private static function _execute($url, $method, array $userOpts, array $defaultOpts, array $userHeaders, array $defaultHeaders = array(), $requestBody = null) { self::$_client->initialize($url); switch ($method) { case 'GET': $defaultOpts[CURLOPT_HTTPGET] = true; break; case 'POST': $defaultOpts[CURLOPT_POST] = true; break; default: $defaultOpts[CURLOPT_CUSTOMREQUEST] = $method; } $bodyType = gettype($requestBody); if (null !== $requestBody && in_array($method, self::$_methodsWithBody) && !isset($userOpts[CURLOPT_POSTFIELDS])) { if ('array' === $bodyType || 'object' === $bodyType) { $requestBody = http_build_query($requestBody); } $defaultOpts[CURLOPT_POSTFIELDS] = $requestBody; } self::$_client->setCurlOpts($userOpts + $defaultOpts); self::$_client->setRequestHeaders($userHeaders + $defaultHeaders); return self::$_client->execute(true); } } CURL::_init();