eZ\Publish\Core\Search\Elasticsearch\Content\Gateway\HttpClient\Stream::request PHP Method

request() public method

Returns the result from the remote server.
public request ( string $method, string $path, Message $message = null ) : Message
$method string
$path string
$message eZ\Publish\Core\Search\Elasticsearch\Content\Gateway\Message
return eZ\Publish\Core\Search\Elasticsearch\Content\Gateway\Message
    public function request($method, $path, Message $message = null)
    {
        $message = $message ?: new Message();
        $requestHeaders = $this->getRequestHeaders($message->headers);
        $url = $this->server . $path;
        $contextOptions = array('http' => array('method' => $method, 'content' => $message->body, 'ignore_errors' => true, 'header' => $requestHeaders));
        $httpFilePointer = @fopen($url, 'r', false, stream_context_create($contextOptions));
        // Check if connection has been established successfully
        if ($httpFilePointer === false) {
            throw new ConnectionException($this->server, $path, $method);
        }
        // Read request body
        $body = '';
        while (!feof($httpFilePointer)) {
            $body .= fgets($httpFilePointer);
        }
        $metaData = stream_get_meta_data($httpFilePointer);
        // This depends on PHP compiled with or without --curl-enable-streamwrappers
        $rawHeaders = isset($metaData['wrapper_data']['headers']) ? $metaData['wrapper_data']['headers'] : $metaData['wrapper_data'];
        $headers = array();
        foreach ($rawHeaders as $lineContent) {
            // Extract header values
            if (preg_match('(^HTTP/(?P<version>\\d+\\.\\d+)\\s+(?P<status>\\d+))S', $lineContent, $match)) {
                $headers['version'] = $match['version'];
                $headers['status'] = (int) $match['status'];
            } else {
                list($key, $value) = explode(':', $lineContent, 2);
                $headers[$key] = ltrim($value);
            }
        }
        return new Message($headers, $body);
    }