/** * 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); }
/** * 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; }
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())); }