Cloudinary\Api::call_api PHP Method

call_api() public method

public call_api ( $method, $uri, $params, &$options )
    function call_api($method, $uri, $params, &$options)
    {
        $prefix = \Cloudinary::option_get($options, "upload_prefix", \Cloudinary::config_get("upload_prefix", "https://api.cloudinary.com"));
        $cloud_name = \Cloudinary::option_get($options, "cloud_name", \Cloudinary::config_get("cloud_name"));
        if (!$cloud_name) {
            throw new \InvalidArgumentException("Must supply cloud_name");
        }
        $api_key = \Cloudinary::option_get($options, "api_key", \Cloudinary::config_get("api_key"));
        if (!$api_key) {
            throw new \InvalidArgumentException("Must supply api_key");
        }
        $api_secret = \Cloudinary::option_get($options, "api_secret", \Cloudinary::config_get("api_secret"));
        if (!$api_secret) {
            throw new \InvalidArgumentException("Must supply api_secret");
        }
        $api_url = implode("/", array_merge(array($prefix, "v1_1", $cloud_name), $uri));
        $params = array_filter($params, function ($v) {
            return !is_null($v) && $v !== "";
        });
        if ($method == "get") {
            $api_url .= "?" . preg_replace("/%5B\\d+%5D/", "%5B%5D", http_build_query($params));
        }
        $ch = curl_init($api_url);
        if ($method != "get") {
            $post_params = array();
            foreach ($params as $key => $value) {
                if (is_array($value)) {
                    $i = 0;
                    foreach ($value as $item) {
                        $post_params[$key . "[{$i}]"] = $item;
                        $i++;
                    }
                } else {
                    $post_params[$key] = $value;
                }
            }
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);
        }
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($ch, CURLOPT_USERPWD, "{$api_key}:{$api_secret}");
        curl_setopt($ch, CURLOPT_CAINFO, realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR . "cacert.pem");
        curl_setopt($ch, CURLOPT_USERAGENT, \Cloudinary::userAgent());
        curl_setopt($ch, CURLOPT_PROXY, \Cloudinary::option_get($options, "api_proxy", \Cloudinary::config_get("api_proxy")));
        $response = $this->execute($ch);
        $curl_error = NULL;
        if (curl_errno($ch)) {
            $curl_error = curl_error($ch);
        }
        curl_close($ch);
        if ($curl_error != NULL) {
            throw new \Cloudinary\Api\GeneralError("Error in sending request to server - " . $curl_error);
        }
        if ($response->responseCode == 200) {
            return new \Cloudinary\Api\Response($response);
        } else {
            $exception_class = \Cloudinary::option_get(self::$CLOUDINARY_API_ERROR_CLASSES, $response->responseCode);
            if (!$exception_class) {
                throw new \Cloudinary\Api\GeneralError("Server returned unexpected status code - {$response->responseCode} - {$response->body}");
            }
            $json = $this->parse_json_response($response);
            throw new $exception_class($json["error"]["message"]);
        }
    }