/** 
 *     Parameters examples:
 *         @param string $requestMethod: GET / POST
 *         @param string $url: 'https://62.65.34.19'
 *        @param array $extraHeaderParams: array('Content-type: text/plain', 'Content-length: 100')
 *        @param array $postParams: array('x'=>'y', 'z'=>'w')
 *        @param array $getParams: array('x'=>'y', 'z'=>'w')
 */
function makeRequest($requestMethod = 'GET', $url = '', array $getParams = array(), array $postParams = array(), array $extraHeaderParams = array()) {
    
    // check the URL
    if (!is_string($url) || empty($url)) {
        return false;
    }
    
    // fix the URL if needed
    if (!preg_match('%^http%i', $url)) {
        $url = 'http://'.$url;
    }
    
    // add get parameters if defined
    if (is_array($getParams) && !empty($getParams)) {
        $url.='?'.http_build_query($getParams);
    }
    
    // initialize the CURL handler
    if (!$ch = @curl_init($url)) {
        return 'Error initializing curl_init';
    }
    
    // define the SSL port if needed
    if (preg_match('%^https%i', $url)) {
        curl_setopt($ch, CURLOPT_PORT, 443);
    }
    
    // POST params
    if (strcasecmp($requestMethod, 'POST') == 0) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params); 
    }
    
    if (strcasecmp($requestMethod, 'GET') == 0) {
        curl_setopt($ch, CURLOPT_HTTPGET, true);
    }
    
    if (is_array($extraHeaderParams) && !empty($extraHeaderParams)) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $extraHeaderParams);
    }
    
    // follow redirects
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 15);
    
    // get the response header
    curl_setopt($ch, CURLOPT_HEADER, true);
    
    // get the response
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // SSL configuration
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_SSLKEYPASSWD, "VmrLp7mK");
    curl_setopt($ch, CURLOPT_SSLCERT, realpath('PTwebapi.pem'));
    
    // execute the cURL request
    if (!$result = curl_exec($ch)) {
        $error = curl_error($ch);
        curl_close($ch);
        return $error;
    }
    
    return $result;
}

// make request example
echo makeRequest('http://amazon.com/');

// test 
echo makeRequest('GET', 'http://www.youtube.com', array('v'=>'xR0DKOGco_o'));