示例#1
0
 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'));
 }
示例#2
0
/**
 * 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;
}
示例#3
0
 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;
 }
示例#4
0
 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:';
     }
 }
示例#5
0
 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();
     }
 }
示例#6
0
 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'));
 }
示例#7
0
 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;
 }