Esempio n. 1
0
 public function sendRequest($method, $path, array $options = array())
 {
     $path = ltrim($path, '/');
     // leading slash in path fails in github:enterprise
     $token = null;
     if (!empty($options['access_token'])) {
         $token = $options['access_token'];
     } else {
         if (!empty($options['oauth_token'])) {
             $token = $options['oauth_token'];
         } else {
             $token = $this->configuration()->get('oauth_token');
         }
     }
     $force_urlencoded = false;
     if (!empty($options['force_urlencoded']) && $options['force_urlencoded']) {
         $force_urlencoded = true;
     }
     $url = null;
     if (!empty($options['endpoint'])) {
         $url = $options['endpoint'];
     } else {
         $url = $this->configuration()->get('api_endpoint');
     }
     $connection = $this->connection()->create($options);
     $listener = $connection['listener'];
     $options = $connection['options'];
     $connection = $connection['connection'];
     if (!empty($options['accept'])) {
         $connection->addHeader('Accept: ' . $options['accept']);
     } else {
         $connection->addHeader('Accept: application/vnd.github.beta+json');
     }
     if ($token) {
         $connection->addHeader('Authorization: token ' . $token);
     }
     $browser = new \Buzz\Browser();
     if ($this->fixture) {
         $request_client = new Request\FixtureRequest($this->fixture);
     } else {
         $request_client = new \Buzz\Client\Curl();
     }
     $browser->setClient($request_client);
     if (!empty($listener)) {
         $browser->addListener($listener);
     }
     if (strtolower($method) == 'get') {
         $path .= '?' . http_build_query($options);
     } elseif (in_array(strtolower($method), array('patch', 'post', 'put'))) {
         $connection->setContent(json_encode($options, true));
     }
     $connection->fromUrl($url);
     $connection->setResource('/' . $path);
     $connection->setMethod($method);
     $request_host = $this->configuration()->get('request_host');
     if (!empty($request_host)) {
         $connection->setHost($request_host);
     }
     $response = $browser->send($connection);
     $this->fixture = false;
     $this->handleErrors($connection, $response);
     return $response;
 }