/**
  * Sets options on a cURL resource based on a request.
  */
 private static function setOptionsFromRequest($curl, RequestInterface $request)
 {
     $options = array(CURLOPT_HTTP_VERSION => $request->getProtocolVersion() == 1.0 ? CURL_HTTP_VERSION_1_0 : CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $request->getMethod(), CURLOPT_URL => $request->getHost() . $request->getResource(), CURLOPT_HTTPHEADER => $request->getHeaders());
     switch ($request->getMethod()) {
         case RequestInterface::METHOD_HEAD:
             $options[CURLOPT_NOBODY] = true;
             break;
         case RequestInterface::METHOD_GET:
             $options[CURLOPT_HTTPGET] = true;
             break;
         case RequestInterface::METHOD_POST:
         case RequestInterface::METHOD_PUT:
         case RequestInterface::METHOD_DELETE:
         case RequestInterface::METHOD_PATCH:
         case RequestInterface::METHOD_OPTIONS:
             $options[CURLOPT_POSTFIELDS] = $fields = static::getPostFields($request);
             // remove the content-type header
             if (is_array($fields)) {
                 $options[CURLOPT_HTTPHEADER] = array_filter($options[CURLOPT_HTTPHEADER], function ($header) {
                     return 0 !== stripos($header, 'Content-Type: ');
                 });
             }
             break;
     }
     curl_setopt_array($curl, $options);
 }
Exemple #2
0
 /**
  * Populates uri, method and entityBody used to generate the Authentication header using the specified request object.
  * Appends the Authentication header if it is present and has been able to be calculated.
  *
  * @param RequestInterface $request  A request object
  */
 public function preSend(RequestInterface $request)
 {
     $this->setUri($request->getResource());
     $this->setMethod($request->getMethod());
     $this->setEntityBody($request->getContent());
     $header = $this->getHeader();
     if ($header) {
         $request->addHeader($header);
     }
 }
 /**
  * @param string|null $message
  */
 public function __construct(RequestInterface $request, Response $response, $message = null)
 {
     $this->request = $request;
     $this->response = $response;
     if ($message === null) {
         $curlError = $response->getHeader('X-Curl-Error-Result');
         $message = sprintf('HTTP %s request to "%s%s" failed: %d - "%s".', $request->getMethod(), $request->getHost(), $request->getResource(), $curlError ?: $response->getStatusCode(), $curlError ? curl_strerror($curlError) : $response->getReasonPhrase());
     }
     parent::__construct($message);
 }
 public function preSend(RequestInterface $request)
 {
     $raw = $request->getContent();
     $url = new Url($this->apiBaseUrl . $request->getResource() . '.json');
     $request->setContent(json_encode($raw));
     $request->setHost($url->getHost());
     $request->setResource($url->getResource());
     $request->addHeader('Authorization: Bearer ' . $this->token);
     $request->addHeader('Accept: application/json');
     $request->addHeader('Content-Type: application/json');
 }
 /**
  * Returns true if the current cookie matches the supplied request.
  *
  * @return boolean
  */
 public function matchesRequest(RequestInterface $request)
 {
     // domain
     if (!$this->matchesDomain(parse_url($request->getHost(), PHP_URL_HOST))) {
         return false;
     }
     // path
     if (!$this->matchesPath($request->getResource())) {
         return false;
     }
     // secure
     if ($this->hasAttribute(static::ATTR_SECURE) && !$request->isSecure()) {
         return false;
     }
     return true;
 }
 public function preSend(RequestInterface $request)
 {
     if ($request::METHOD_GET !== $request->getMethod() || null === $this->page) {
         return;
     }
     $resource = $request->getResource();
     // Already configured, properly a secondary request
     if (false !== strpos($resource, 'pagelen=') xor false !== strpos($resource, 'limit=')) {
         return;
     }
     $urlComponents = parse_url($resource);
     if (!isset($urlComponents['query'])) {
         $urlComponents['query'] = [];
     } else {
         parse_str($urlComponents['query'], $query);
         $urlComponents['query'] = $query;
     }
     /*
      * Page limiting works as follow (only when perPage is higher then maximum):
      *
      * Divide perPage by two, so each page covers exactly two request.
      * We have a maximum of 100 (unless the limit is disabled) so no crazy math or truncating is required.
      */
     if ('2.0' === $this->client->getApiVersion()) {
         $urlComponents['query']['pagelen'] = null === $this->perPage ? 100 : $this->perPage;
         $urlComponents['query']['page'] = $this->page;
         // BitBucket please fix your API..
         // https://bitbucket.org/site/master/issue/9659/pagelen-sometimes-limited-to-100
         if (false !== strpos($urlComponents['path'], '/pullrequests') && $urlComponents['query']['pagelen'] > 50) {
             $urlComponents['query']['pagelen'] = $urlComponents['query']['pagelen'] / 2;
         }
     } elseif ('1.0' === $this->client->getApiVersion()) {
         if (null === $this->perPage) {
             // Use the maximum
             $limit = 50;
         } elseif ($this->perPage > 50) {
             // Divide perPage by two, so each page covers exactly two request (no crazy math or truncating).
             $limit = $this->perPage / 2;
         } else {
             $limit = $this->perPage;
         }
         $urlComponents['query']['limit'] = $limit;
         $urlComponents['query']['start'] = abs($this->page - 1) * $limit;
     }
     $request->setResource($urlComponents['path'] . '?' . http_build_query($urlComponents['query'], '', '&'));
 }
 /**
  * {@inheritDoc}
  */
 public function preSend(RequestInterface $request)
 {
     $request->setContent(preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $request->getContent()));
     $request->setResource(preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $request->getResource()));
 }
 /**
  * Check if specified endpoint is in current request
  *
  * @param  string           $endpoint
  * @param  RequestInterface $request
  * @return bool
  */
 protected function isEndpointRequested($endpoint, RequestInterface $request)
 {
     return strpos($request->getResource(), $endpoint) !== false;
 }
Exemple #9
0
 public function postSend(RequestInterface $request, MessageInterface $response)
 {
     $seconds = microtime(true) - $this->startTime;
     call_user_func($this->logger, sprintf('%sSent "%s %s%s" in %dms', $this->prefix, $request->getMethod(), $request->getHost(), $request->getResource(), round($seconds * 1000)));
 }
 /**
  * @param RequestInterface $request
  * @param Response         $response
  */
 private function logResponse(RequestInterface $request, Response $response)
 {
     $this->logger->debug(sprintf('Request to %s%s with content "%s" was send and response with content "%s" and status %d received', $request->getHost(), $request->getResource(), $request->getContent(), $response->getContent(), $response->getStatusCode()));
 }
 public function postSend(RequestInterface $request, MessageInterface $response)
 {
     $this->data[] = array('request' => array('method' => $request->getMethod(), 'url' => sprintf('%s%s', $request->getHost(), $request->getResource()), 'headers' => $request->getHeaders(), 'content' => $request->getContent()), 'response' => array('statusCode' => $response->getStatusCode(), 'reasonPhrase' => $response->getReasonPhrase(), 'headers' => $response->getHeaders(), 'content' => $response->getContent()));
 }