public static function createRequestFromStreamContext($context, $path, Request $existing = null)
    {
        $http = self::getHttpOptionsFromContext($context);
        $request = $existing;

        if (empty($request)) {
            $method = !empty($http['method']) ? $http['method'] : 'GET';
            $request = new Request($method, $path, array());
        }

        if (!empty($http['header'])) {
            $headers = HttpUtil::parseHeaders(HttpUtil::parseRawHeader($http['header']));
            foreach ($headers as $key => $value) {
                $request->setHeader($key, $value);
            }
        }

        if (!empty($http['content'])) {
            $request->setBody($http['content']);
        }

        if (!empty($http['user_agent'])) {
            $request->setHeader('User-Agent', $http['user_agent']);
        }

        if (isset($http['follow_location'])) {
            $request->setCurlOption(CURLOPT_FOLLOWLOCATION, (bool) $http['follow_location']);
        }

        if (isset($http['max_redirects'])) {
            $request->setCurlOption(CURLOPT_MAXREDIRS, $http['max_redirects']);
        }

        if (isset($http['timeout'])) {
            $request->setCurlOption(CURLOPT_TIMEOUT, $http['timeout']);
        }

        // TODO: protocol_version

        return $request;
    }