public function testChecksIfHasHeader() { $message = ['headers' => ['Foo' => ['Bar', 'Baz'], 'foo' => ['hello'], 'bar' => ['1']]]; $this->assertTrue(Core::hasHeader($message, 'Foo')); $this->assertTrue(Core::hasHeader($message, 'foo')); $this->assertTrue(Core::hasHeader($message, 'FoO')); $this->assertTrue(Core::hasHeader($message, 'bar')); $this->assertFalse(Core::hasHeader($message, 'barr')); }
/** * Fetches the HTTP URL * * @api * @param string $url * @param array $options See Guzzle Ring Request * @return array Ring Response */ function fetch($url, array $options = []) { $urlComponents = parse_url($url); $request = []; $options = _default_options($options); if (isset($options['handler'])) { $handler = $options['handler']; unset($options['handler']); } else { $handler = default_handler(); } $request = array_merge(['uri' => isset($urlComponents['path']) ? $urlComponents['path'] : '/', 'scheme' => $urlComponents['scheme']], $options); if (isset($urlComponents['query'])) { $request['query_string'] = $urlComponents['query']; } if (!Core::hasHeader($request, 'host')) { $host = $urlComponents['host']; if (isset($urlComponents['port']) && $urlComponents['port'] !== 80 && $urlComponents['port'] !== 443) { $host .= ':' . $urlComponents['port']; } $request['headers']['host'] = [$host]; } if (!Core::hasHeader($request, 'authorization')) { if (isset($urlComponents['user'])) { $user = $urlComponents['user']; $password = isset($urlComponents['pass']) ? $urlComponents['pass'] : ''; } elseif (isset($options['auth'])) { @(list($user, $password) = $options['auth']); } if (isset($user) && isset($password)) { $request['headers']['authorization'] = ['Basic ' . base64_encode($user . ':' . $password)]; } } $response = $handler($request); return $response; }
private function getDefaultOptions(array $request) { $headers = ""; foreach ($request['headers'] as $name => $value) { foreach ((array) $value as $val) { $headers .= "{$name}: {$val}\r\n"; } } $context = array('http' => array('method' => $request['http_method'], 'header' => $headers, 'protocol_version' => isset($request['version']) ? $request['version'] : 1.1, 'ignore_errors' => true, 'follow_location' => 0)); $body = Core::body($request); if (isset($body)) { $context['http']['content'] = $body; // Prevent the HTTP handler from adding a Content-Type header. if (!Core::hasHeader($request, 'Content-Type')) { $context['http']['header'] .= "Content-Type:\r\n"; } } $context['http']['header'] = rtrim($context['http']['header']); return $context; }
private function applyHeaders(array $request, array &$options) { foreach ($options['_headers'] as $name => $values) { foreach ($values as $value) { $options[CURLOPT_HTTPHEADER][] = "{$name}: {$value}"; } } // Remove the Accept header if one was not set if (!Core::hasHeader($request, 'Accept')) { $options[CURLOPT_HTTPHEADER][] = 'Accept:'; } }
private function configureDefaults($config) { if (!isset($config['defaults'])) { $this->defaults = $this->getDefaultOptions(); } else { $this->defaults = array_replace($this->getDefaultOptions(), $config['defaults']); } // Add the default user-agent header if (!isset($this->defaults['headers'])) { $this->defaults['headers'] = array('User-Agent' => static::getDefaultUserAgent()); } elseif (!Core::hasHeader($this->defaults, 'User-Agent')) { // Add the User-Agent header if one was not already set $this->defaults['headers']['User-Agent'] = static::getDefaultUserAgent(); } }
public function testParsesLastResponseOnly() { $response1 = ['status' => 301, 'headers' => ['Content-Length' => ['0'], 'Location' => ['/foo']]]; $response2 = ['status' => 200, 'headers' => ['Content-Length' => ['0'], 'Foo' => ['bar']]]; Server::flush(); Server::enqueue([$response1, $response2]); $a = new CurlMultiHandler(); $response = $a(['http_method' => 'GET', 'headers' => ['Host' => [Server::$host]], 'client' => ['curl' => [CURLOPT_FOLLOWLOCATION => true]]])->wait(); $this->assertEquals(1, $response['transfer_stats']['redirect_count']); $this->assertEquals('http://127.0.0.1:8125/foo', $response['effective_url']); $this->assertEquals(['bar'], $response['headers']['Foo']); $this->assertEquals(200, $response['status']); $this->assertFalse(Core::hasHeader($response, 'Location')); }
private function getDefaultOptions(array $request) { $headers = []; foreach ($request['headers'] as $name => $value) { foreach ((array) $value as $val) { $headers[] = "{$name}: {$val}"; } } $context = ['http' => ['method' => $request['http_method'], 'header' => $headers, 'protocol_version' => '1.1', 'ignore_errors' => true, 'follow_location' => 0]]; $body = Core::body($request); if (isset($body)) { $context['http']['content'] = $body; // Prevent the HTTP handler from adding a Content-Type header. if (!Core::hasHeader($request, 'Content-Type')) { $context['http']['header'][] .= "Content-Type:"; } } return $context; }