library/Garp/3rdParty/facebook/src/base_facebook.php
protected function makeRequest($url, $params, $ch=null) {
    if (!$ch) {
      $ch = curl_init();
    }

    $opts = self::$CURL_OPTS;
    if ($this->getFileUploadSupport()) {
      $opts[CURLOPT_POSTFIELDS] = $params;
    } else {
      $opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&');
    }
    $opts[CURLOPT_URL] = $url;

    // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait
    // for 2 seconds if the server does not support this header.
    if (isset($opts[CURLOPT_HTTPHEADER])) {
      $existing_headers = $opts[CURLOPT_HTTPHEADER];
      $existing_headers[] = 'Expect:';
      $opts[CURLOPT_HTTPHEADER] = $existing_headers;
    } else {
      $opts[CURLOPT_HTTPHEADER] = array('Expect:');
    }

    curl_setopt_array($ch, $opts);
    $result = curl_exec($ch);

    if (curl_errno($ch) == 60) { // CURLE_SSL_CACERT
      self::errorLog('Invalid or no certificate authority found, '.
                     'using bundled information');
      curl_setopt($ch, CURLOPT_CAINFO,
                  dirname(__FILE__) . '/fb_ca_chain_bundle.crt');
      $result = curl_exec($ch);
    }

    // With dual stacked DNS responses, it's possible for a server to
    // have IPv6 enabled but not have IPv6 connectivity.  If this is
    // the case, curl will try IPv4 first and if that fails, then it will
    // fall back to IPv6 and the error EHOSTUNREACH is returned by the
    // operating system.
    if ($result === false && empty($opts[CURLOPT_IPRESOLVE])) {
        $matches = array();
        $regex = '/Failed to connect to ([^:].*): Network is unreachable/';
        if (preg_match($regex, curl_error($ch), $matches)) {
          if (strlen(@inet_pton($matches[1])) === 16) {
            self::errorLog('Invalid IPv6 configuration on server, '.
                           'Please disable or get native IPv6 on your server.');
            self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4;
            curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
            $result = curl_exec($ch);
          }
        }
    }

    if ($result === false) {
      $e = new FacebookApiException(array(
        'error_code' => curl_errno($ch),
        'error' => array(
        'message' => curl_error($ch),
        'type' => 'CurlException',
        ),
      ));
      curl_close($ch);
      throw $e;
    }
    curl_close($ch);
    return $result;
  }
protected function makeRequest($url, $params, $ch=null) {
    if (!$ch) {
      $ch = curl_init();
    }

    $opts = self::$CURL_OPTS;
    if ($this->getFileUploadSupport()) {
      $opts[CURLOPT_POSTFIELDS] = $params;
    } else {
      $opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&');
    }
    $opts[CURLOPT_URL] = $url;

    // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait
    // for 2 seconds if the server does not support this header.
    if (isset($opts[CURLOPT_HTTPHEADER])) {
      $existing_headers = $opts[CURLOPT_HTTPHEADER];
      $existing_headers[] = 'Expect:';
      $opts[CURLOPT_HTTPHEADER] = $existing_headers;
    } else {
      $opts[CURLOPT_HTTPHEADER] = array('Expect:');
    }

    curl_setopt_array($ch, $opts);
    $result = curl_exec($ch);

    if (curl_errno($ch) == 60) { // CURLE_SSL_CACERT
      self::errorLog('Invalid or no certificate authority found, '.
                     'using bundled information');
      curl_setopt($ch, CURLOPT_CAINFO,
                  dirname(__FILE__) . '/fb_ca_chain_bundle.crt');
      $result = curl_exec($ch);
    }

    // With dual stacked DNS responses, it's possible for a server to
    // have IPv6 enabled but not have IPv6 connectivity.  If this is
    // the case, curl will try IPv4 first and if that fails, then it will
    // fall back to IPv6 and the error EHOSTUNREACH is returned by the
    // operating system.
    if ($result === false && empty($opts[CURLOPT_IPRESOLVE])) {
        $matches = array();
        $regex = '/Failed to connect to ([^:].*): Network is unreachable/';
        if (preg_match($regex, curl_error($ch), $matches)) {
          if (strlen(@inet_pton($matches[1])) === 16) {
            self::errorLog('Invalid IPv6 configuration on server, '.
                           'Please disable or get native IPv6 on your server.');
            self::$CURL_OPTS[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4;
            curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
            $result = curl_exec($ch);
          }
        }
    }

    if ($result === false) {
      $e = new FacebookApiException(array(
        'error_code' => curl_errno($ch),
        'error' => array(
        'message' => curl_error($ch),
        'type' => 'CurlException',
        ),
      ));
      curl_close($ch);
      throw $e;
    }
    curl_close($ch);
    return $result;
  }
protected function makeRequest ( $ url , $ params , $ ch = null ) { if ( ! $ ch ) { $ ch = curl_init ( ) ; } $ opts = self :: $ CURL_OPTS ; if ( $ this -> getFileUploadSupport ( ) ) { $ opts [ CURLOPT_POSTFIELDS ] = $ params ; } else { $ opts [ CURLOPT_POSTFIELDS ] = http_build_query ( $ params , null , '&' ) ; } $ opts [ CURLOPT_URL ] = $ url ; // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait // for 2 seconds if the server does not support this header. if ( isset ( $ opts [ CURLOPT_HTTPHEADER ] ) ) { $ existing_headers = $ opts [ CURLOPT_HTTPHEADER ] ; $ existing_headers [ ] = 'Expect:' ; $ opts [ CURLOPT_HTTPHEADER ] = $ existing_headers ; } else { $ opts [ CURLOPT_HTTPHEADER ] = array ( 'Expect:' ) ; } curl_setopt_array ( $ ch , $ opts ) ; $ result = curl_exec ( $ ch ) ; if ( curl_errno ( $ ch ) == 60 ) { // CURLE_SSL_CACERT self :: errorLog ( 'Invalid or no certificate authority found, ' . 'using bundled information' ) ; curl_setopt ( $ ch , CURLOPT_CAINFO , dirname ( __FILE__ ) . '/fb_ca_chain_bundle.crt' ) ; $ result = curl_exec ( $ ch ) ; } // With dual stacked DNS responses, it's possible for a server to // have IPv6 enabled but not have IPv6 connectivity.  If this is // the case, curl will try IPv4 first and if that fails, then it will // fall back to IPv6 and the error EHOSTUNREACH is returned by the // operating system. if ( $ result === false && empty ( $ opts [ CURLOPT_IPRESOLVE ] ) ) { $ matches = array ( ) ; $ regex = '/Failed to connect to ([^:].*): Network is unreachable/' ; if ( preg_match ( $ regex , curl_error ( $ ch ) , $ matches ) ) { if ( strlen ( @ inet_pton ( $ matches [ 1 ] ) ) === 16 ) { self :: errorLog ( 'Invalid IPv6 configuration on server, ' . 'Please disable or get native IPv6 on your server.' ) ; self :: $ CURL_OPTS [ CURLOPT_IPRESOLVE ] = CURL_IPRESOLVE_V4 ; curl_setopt ( $ ch , CURLOPT_IPRESOLVE , CURL_IPRESOLVE_V4 ) ; $ result = curl_exec ( $ ch ) ; } } } if ( $ result === false ) { $ e = new FacebookApiException ( array ( 'error_code' => curl_errno ( $ ch ) , 'error' => array ( 'message' => curl_error ( $ ch ) , 'type' => 'CurlException' , ) , ) ) ; curl_close ( $ ch ) ; throw $ e ; } curl_close ( $ ch ) ; return $ result ; }
Makes an HTTP request. This method can be overridden by subclasses if
developers want to do fancier things or use something other than curl to
make the request.

@param string $url The URL to make the request to
@param array $params The parameters to use for the POST body
@param CurlHandler $ch Initialized curl handle

@return string The response text
Makes an HTTP request . This method can be overridden by subclasses if developers want to do fancier things or use something other than curl to make the request .