public function onBeforeRequest(ProxyEvent $event) { $response = $this->fetch($event['request']); if ($response) { // tell proxy client that we do not need to actually perform any HTTP requests $event['request']->params->set('request.complete', true); // replace response // TODO: must be a better way $event['response']->setContent($data->getContent()); $event['response']->headers->replace($data->headers->all()); $event['response']->headers->set('X-Cache', 'hit'); // don't need any plugin to modify this request any further because response is already in place $event->stopPropagation(); } else { $event['response']->headers->set('X-Cache', 'miss'); } }
public final function route(ProxyEvent $event) { $url = $event['request']->getUri(); // url filter provided and current request url does not match it if ($this->url_pattern && strpos($url, $this->url_pattern) === false) { return; } switch ($event->getName()) { case 'request.before_send': $this->onBeforeRequest($event); break; case 'request.sent': $this->onHeadersReceived($event); break; case 'curl.callback.write': $this->onCurlWrite($event); break; case 'request.complete': $this->onCompleted($event); break; } }