public function register(Container $pimple) { // File extensions used to determine whether a URI points to an asset // or an HTML file. $pimple['html_extensions'] = static::$html_extensions; $pimple['asset_extensions'] = static::$asset_extensions; // Matches any URI we think points to an HTML page. $pimple['matcher.html'] = function () use($pimple) { return Matcher::all()->pathExtensionIs($pimple['html_extensions']); }; // Matches any URI we think points to an asset file. $pimple['matcher.asset'] = function () use($pimple) { return Matcher::all()->pathExtensionIs($pimple['asset_extensions']); }; // Matches any URI that is considered "in scope." $pimple['matcher.internal'] = function () use($pimple) { $uri = new Uri($pimple['base_url']); return Matcher::all()->schemeIs($uri->getScheme())->hostIs($uri->getHost())->pathMatches('~^' . preg_quote($uri->getPath(), '~') . '~'); }; // Matches any URI that is both internal and HTML. $pimple['matcher.internal_html'] = function () use($pimple) { return Matcher::all()->add($pimple['matcher.internal'])->add($pimple['matcher.html']); }; // Matches any URI that is both internal and an asset. $pimple['matcher.internal_asset'] = function () use($pimple) { return Matcher::all()->add($pimple['matcher.internal'])->add($pimple['matcher.asset']); }; }
/** * @param string|UriInterface $baseUri * @return ApiUri * @throws \InvalidArgumentException */ public function withBaseUri($baseUri) { if (empty($baseUri)) { throw new \InvalidArgumentException('You must provide a non-empty string or PSR-7 UserInterface'); } elseif (is_string($baseUri)) { $baseUri = new Psr7\Uri($baseUri); } elseif (!$baseUri instanceof UriInterface) { throw new \InvalidArgumentException('Invalid format provided; should either be a string or PSR-7 UriInterface'); } if (!in_array($baseUri->getScheme(), ['http', 'https'])) { throw new \InvalidArgumentException('Only http & https schemes are allowed'); } // always store the base URI with a final / if (!preg_match('{/$}', $baseUri->getPath())) { $baseUri = $baseUri->withPath($baseUri->getPath() . '/'); } /** @var ApiUri $new */ if ('' === (string) $this) { $new = new static($baseUri); } else { $new = clone $this; } $new->baseUri = $baseUri; return $new; }
public function testParsesProvidedUrl() { $uri = new Uri('https://*****:*****@test.com:443/path/123?q=abc#test'); // Standard port 443 for https gets ignored. $this->assertEquals('https://*****:*****@test.com/path/123?q=abc#test', (string) $uri); $this->assertEquals('test', $uri->getFragment()); $this->assertEquals('test.com', $uri->getHost()); $this->assertEquals('/path/123', $uri->getPath()); $this->assertEquals(null, $uri->getPort()); $this->assertEquals('q=abc', $uri->getQuery()); $this->assertEquals('https', $uri->getScheme()); $this->assertEquals('michael:test', $uri->getUserInfo()); }
protected function request($method, $url, $params = [], $headers = []) { $jar = $this->cache->has($this->tabName) ? $this->cache->get($this->tabName) : new CookieJar(); $url = new Uri($url); $headers = array_merge(['Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8', 'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36', 'Host' => $url->getHost(), 'Origin' => $url->getScheme() . "://" . $url->getHost() . "/"], $headers); $stack = HandlerStack::create(); $stack->push(Middleware::mapRequest(function (RequestInterface $request) { $URI = $request->getUri(); $this->baseUri = $URI->__toString(); return $request->withUri($URI); })); $client = new Client(["cookies" => $jar, 'handler' => $stack, 'verify' => __DIR__ . '/../cacert.pem']); $request = new GuzzleHttpRequest($method, $url, $headers, http_build_query($params)); $this->response = $client->send($request, ['timeout' => 120]); $this->cache->put($this->tabName, $jar, 24 * 60); }
protected function assertUriEquals($expectedUri, $actualUri) { if (is_string($expectedUri)) { $expectedUri = new Psr7\Uri($expectedUri); } if (is_string($actualUri)) { $actualUri = new Psr7\Uri($actualUri); } $this->assertEquals($expectedUri->getScheme(), $actualUri->getScheme()); $this->assertEquals($expectedUri->getPort(), $actualUri->getPort()); $this->assertEquals($expectedUri->getHost(), $actualUri->getHost()); $this->assertEquals($expectedUri->getPath(), $actualUri->getPath()); $expectedQueryParts = Psr7\parse_query($expectedUri->getQuery()); $actualQueryParts = Psr7\parse_query($actualUri->getQuery()); $this->assertEquals($expectedQueryParts, $actualQueryParts); }
/** * Generate a base string for a HMAC-SHA1 signature * based on the given a url, method, and any parameters. * * @param Url $url * @param string $method * @param array $parameters * * @return string */ protected function baseString(Uri $url, $method = 'POST', array $parameters = array()) { $baseString = rawurlencode($method) . '&'; $schemeHostPath = Uri::fromParts(array('scheme' => $url->getScheme(), 'host' => $url->getHost(), 'path' => $url->getPath())); $baseString .= rawurlencode($schemeHostPath) . '&'; $data = array(); parse_str($url->getQuery(), $query); $data = array_merge($query, $parameters); // normalize data key/values array_walk_recursive($data, function (&$key, &$value) { $key = rawurlencode(rawurldecode($key)); $value = rawurlencode(rawurldecode($value)); }); ksort($data); $baseString .= $this->queryStringFromData($data); return $baseString; }
public function __construct(Options $options, OutputInterface $ouput) { $timeout = $options->getTimeout(); $client = new ClientGuzzle(['timeout' => $timeout]); $url = $options->getUrl(); $response = $client->get($url); if ($response->getStatusCode() != 200) { throw new RuntimeException(sprintf('Cannot access this url: "%s"', $url)); } $uri = new Uri($url); $baseUri = $uri->getScheme() . '://' . $uri->getHost(); if (!empty($uri->getPort())) { $baseUri .= ':' . $uri->getPort(); } $options->setBaseUri($baseUri); $this->options = $options; $this->output = $ouput; }
private function generateUri() { $uri = new Uri($this->client->getEndpoint()); if ($uri->getScheme() === 'https' && strpos($this->bucket, '.') !== false) { // Use path-style URLs $uri = $uri->withPath($this->bucket); } else { // Use virtual-style URLs $uri = $uri->withHost($this->bucket . '.' . $uri->getHost()); } return (string) $uri; }
public function testDefaultReturnValuesOfGetters() { $uri = new Uri(); $this->assertSame('', $uri->getScheme()); $this->assertSame('', $uri->getAuthority()); $this->assertSame('', $uri->getUserInfo()); $this->assertSame('', $uri->getHost()); $this->assertNull($uri->getPort()); $this->assertSame('', $uri->getPath()); $this->assertSame('', $uri->getQuery()); $this->assertSame('', $uri->getFragment()); }